45 lines
1.3 KiB
GDScript
45 lines
1.3 KiB
GDScript
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")
|