extends State class_name EnemyState @export var enemy : CharacterBody3D @export var enemy_targets : Array[Area3D] @export var move_speed : float = 3 @export var can_see : bool = false func Enter(): if enemy_targets != null: for target in enemy_targets: target.body_part_hit.connect(take_damage) func Update(delta): if enemy.visibility_areas != null: for area in enemy.visibility_areas: var bodies = area.get_overlapping_bodies() if bodies != null: for i in bodies: enemy.point_of_interest = i.global_position else: enemy.point_of_interest = null if enemy.point_of_interest != null: enemy.line_of_sight_ray.look_at(enemy.point_of_interest) if enemy.line_of_sight_ray.is_colliding(): if enemy.line_of_sight_ray.get_collider() is Player: if can_see: enemy.character_follow = enemy.line_of_sight_ray.get_collider() Transitioned.emit(self,"attack") func take_damage(dam,bullet_damage): SignalBus.emit_signal("enemy_hit") enemy.health -= dam * bullet_damage enemy.health_bar_sprite.visible = true enemy.health_bar_sprite.health_update() var number_spawn = enemy.damage_number.instantiate() number_spawn.damage_amt = bullet_damage * dam number_spawn.position = enemy.global_position + Vector3(0,2,0) get_tree().get_root().add_child(number_spawn) if enemy.health <= 0: Transitioned.emit(self,"die")