update
This commit is contained in:
@@ -13,6 +13,7 @@ func _ready() -> void:
|
||||
spawn_position = global_position
|
||||
add_to_group("enemies")
|
||||
EventBus.entity_died.connect(_on_entity_died)
|
||||
EventBus.damage_dealt.connect(_on_damage_dealt)
|
||||
|
||||
func _on_entity_died(entity: Node) -> void:
|
||||
if entity == self:
|
||||
@@ -26,10 +27,29 @@ func _physics_process(delta: float) -> void:
|
||||
velocity.y -= gravity * delta
|
||||
move_and_slide()
|
||||
|
||||
func _on_damage_dealt(attacker: Node, damage_target: Node, _amount: float) -> void:
|
||||
if damage_target == self and attacker.name == "Player":
|
||||
_engage(attacker)
|
||||
|
||||
func _engage(new_target: Node3D) -> void:
|
||||
if state == State.CHASE or state == State.ATTACK:
|
||||
return
|
||||
target = new_target
|
||||
state = State.CHASE
|
||||
_alert_nearby()
|
||||
|
||||
func _alert_nearby() -> void:
|
||||
var enemies := get_tree().get_nodes_in_group("enemies")
|
||||
for enemy in enemies:
|
||||
if enemy != self and is_instance_valid(enemy):
|
||||
if enemy.state == enemy.State.IDLE:
|
||||
var dist: float = global_position.distance_to(enemy.global_position)
|
||||
if dist <= 3.0:
|
||||
enemy._engage(target)
|
||||
|
||||
func _on_detection_area_body_entered(body: Node3D) -> void:
|
||||
if body is CharacterBody3D and body.name == "Player":
|
||||
target = body
|
||||
state = State.CHASE
|
||||
_engage(body)
|
||||
EventBus.enemy_engaged.emit(self, body)
|
||||
|
||||
func _on_detection_area_body_exited(body: Node3D) -> void:
|
||||
|
||||
Reference in New Issue
Block a user