extends Unit class_name Enemy @export var flock_push := 20.0 @onready var vision_area: Area2D = $VisionArea @onready var knockback_timer: Timer = $KnockbackTimer var can_move := true var knockback_dir: Vector2 var knockback_power: float # Called when the node enters the scene tree for the first time. func _ready() -> void: super._ready() # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: if not can_move: return if not can_move_forwards_player(): return position += (get_move_direction() + knockback_dir * knockback_power) * stats.speed * delta update_rotate() func get_move_direction() -> Vector2: if not is_instance_valid(Global.player): return Vector2.ZERO var direction := global_position.direction_to(Global.player.global_position) for area: Node2D in vision_area.get_overlapping_areas(): if area != self and area.is_inside_tree(): var vector := global_position - area.global_position direction += flock_push * vector.normalized() / vector.length() return direction func update_rotate() -> void: print("11111111") if !is_instance_valid(Global.player): return var player_pos := Global.player.position var moving_right := global_position.x < player_pos.x print(moving_right, '111111') visuals.scale = Vector2(-0.5,0.5) if moving_right else Vector2(0.5,0.5) func can_move_forwards_player() -> bool: return is_instance_valid(Global.player) and\ global_position.distance_to(Global.player.position) > 60 func apply_knockback(knock_dir: Vector2, knock_power: float) -> void: knockback_dir = knock_dir knockback_power = knock_power if knockback_timer.time_left > 0: knockback_timer.stop() reset_knockback() knockback_timer.start() func reset_knockback() -> void: knockback_dir = Vector2.ZERO knockback_power = 0 func _on_knockback_timer_timeout() -> void: reset_knockback() func _on_hurtbox_component_on_damaged(hitbox: HitboxComponent) -> void: super._on_hurtbox_component_on_damaged(hitbox) if hitbox.knockback_power > 0: var dir := hitbox.source.global_position.direction_to(global_position) apply_knockback(dir, hitbox.knockback_power)