extends Area2D @onready var earth_aligner = $EarthAligner var speed = 100 var damage = 1 var player : CharacterBody2D var target : CharacterBody2D var current_knockback = Vector2.ZERO var knockback_weight = 800 var aggro_range = 900 var chase_range = 1400 func _ready() -> void: player = get_tree().get_root().get_node_or_null("main/Player") $AnimatedSprite2D.play("default") func _physics_process(delta: float) -> void: if !is_instance_valid(player): return var dist = (position - player.position).length() if(dist > chase_range): target = null elif(target == null and dist <= aggro_range): target = player if(target!=null): var motion = -(position - target.position).normalized() * speed self.position += motion * delta * min(1, dist/(motion.length()*delta)) self.position += current_knockback * delta current_knockback = current_knockback/pow(1.3, 60*delta) if(self.overlaps_body(player)): player.hurt(damage, self.global_position-player.global_position) func _on_death(): for child in get_children(): if not child is AudioStreamPlayer2D: child.queue_free() await $AudioStreamPlayer2D.finished self.queue_free() func _on_damage_taken(_damage : int, dir: Vector2): current_knockback = - dir * knockback_weight $AudioStreamPlayer2D.play()