37 lines
760 B
GDScript
37 lines
760 B
GDScript
class_name EnemyGoal
|
|
extends Node3D
|
|
|
|
signal goal_cleared()
|
|
signal goal_occupied()
|
|
|
|
@export var audio_player: AudioStreamPlayer3D
|
|
|
|
var enemies_inside: int
|
|
|
|
|
|
func _on_area_3d_body_entered(body: Node3D) -> void:
|
|
if body is EnemyController:
|
|
body.goal_entered()
|
|
audio_player.play()
|
|
|
|
|
|
func enemy_entered_shield_range(body: Node3D) -> void:
|
|
if body is EnemyController:
|
|
if enemies_inside == 0:
|
|
goal_occupied.emit()
|
|
enemies_inside += 1
|
|
body.died.connect(enemy_died)
|
|
body.reached_goal.connect(enemy_reached_goal)
|
|
|
|
|
|
func enemy_died(enemy: Enemy) -> void:
|
|
enemies_inside -= 1
|
|
if enemies_inside == 0:
|
|
goal_cleared.emit()
|
|
|
|
|
|
func enemy_reached_goal(enemy: Enemy, penalty: int) -> void:
|
|
enemies_inside -= 1
|
|
if enemies_inside == 0:
|
|
goal_cleared.emit()
|