extends Node var player : Entity = null var parent : Entity @export var weapon : Node2D @export var sprite : Node2D @export var animator : AnimationPlayer @export var walk_speed : float = 200 var in_range : bool = false var can_attack : bool = true func _ready() -> void: parent = get_node("..") walk_speed = randf_range(walk_speed - 50, walk_speed + 50) var delta_pos : Vector2 func _process(delta: float) -> void: if !player: return delta_pos = player.global_position - parent.global_position if delta_pos.x < 0: if weapon.position.x > 0: weapon.position.x = -weapon.position.x if weapon.scale.x > 0: weapon.scale.x = -1 if sprite.scale.x > 0: sprite.scale.x = -1 else: if weapon.position.x < 0: weapon.position.x = -weapon.position.x if weapon.scale.x < 0: weapon.scale.x = 1 if sprite.scale.x < 0: sprite.scale.x = 1 if in_range && can_attack: weapon.action() parent.linear_velocity.y = 2000 can_attack = false func _physics_process(delta: float) -> void: if !in_range && parent.linear_velocity.y == 0 && player: if delta_pos.x < 0: parent.linear_velocity.x = -walk_speed else: parent.linear_velocity.x = walk_speed animator.play("walk") elif in_range: animator.stop() func _on_area_2d_body_entered(body:Node2D) -> void: print(body) if body is Entity: if body.is_player: player = body $"AttackCooldown".start() func _on_attack_area_body_entered(body: Node2D) -> void: if body is Entity: if body.is_player: in_range = true func _on_attack_area_body_exited(body: Node2D) -> void: if body is Entity: if body.is_player: in_range = false func _on_attack_cooldown_timeout() -> void: can_attack = true