2025-09-16 00:28:49 +02:00
|
|
|
extends Area2D
|
2025-09-16 14:59:40 +02:00
|
|
|
@onready var earth_aligner = $EarthAligner
|
2025-09-16 00:28:49 +02:00
|
|
|
var speed = 100
|
|
|
|
|
var damage = 1
|
|
|
|
|
var player : CharacterBody2D
|
2025-09-16 15:43:35 +02:00
|
|
|
var target : CharacterBody2D
|
2025-09-16 14:59:40 +02:00
|
|
|
var current_knockback = Vector2.ZERO
|
|
|
|
|
var knockback_weight = 800
|
2025-09-16 00:28:49 +02:00
|
|
|
|
2025-09-16 15:43:35 +02:00
|
|
|
var aggro_range = 900
|
|
|
|
|
var chase_range = 1400
|
|
|
|
|
|
2025-09-16 00:28:49 +02:00
|
|
|
func _ready() -> void:
|
2025-09-17 19:25:22 +02:00
|
|
|
player = get_tree().get_root().get_node_or_null("main/Player")
|
2025-09-18 02:57:31 +02:00
|
|
|
$AnimatedSprite2D.play("default")
|
2025-09-16 00:28:49 +02:00
|
|
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
2025-09-17 19:25:22 +02:00
|
|
|
if !is_instance_valid(player):
|
|
|
|
|
return
|
2025-09-17 10:41:09 +02:00
|
|
|
|
2025-09-16 00:28:49 +02:00
|
|
|
var dist = (position - player.position).length()
|
2025-09-16 15:43:35 +02:00
|
|
|
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))
|
2025-09-16 16:14:56 +02:00
|
|
|
|
2025-09-17 01:42:14 +02:00
|
|
|
|
2025-09-17 15:10:13 +02:00
|
|
|
self.position += current_knockback * delta
|
2025-09-16 14:59:40 +02:00
|
|
|
current_knockback = current_knockback/pow(1.3, 60*delta)
|
2025-09-16 16:14:56 +02:00
|
|
|
|
2025-09-16 00:28:49 +02:00
|
|
|
if(self.overlaps_body(player)):
|
2025-09-18 00:32:37 +02:00
|
|
|
player.hurt(damage, self.global_position-player.global_position)
|
2025-09-16 16:14:56 +02:00
|
|
|
|
2025-09-16 14:59:40 +02:00
|
|
|
func _on_death():
|
|
|
|
|
self.queue_free()
|
|
|
|
|
|
|
|
|
|
func _on_damage_taken(_damage : int, dir: Vector2):
|
2025-09-17 16:43:44 +02:00
|
|
|
current_knockback = - dir * knockback_weight
|