37 lines
1.3 KiB
GDScript
37 lines
1.3 KiB
GDScript
class_name BossEncounter
|
|
extends Node2D
|
|
|
|
@onready var boss: Node2D = $Boss
|
|
@onready var status_label: Label = $EncounterUI/StatusLabel
|
|
@onready var hint_label: Label = $EncounterUI/HintLabel
|
|
@onready var game_state: Node = get_node("/root/GameState")
|
|
|
|
|
|
func _ready() -> void:
|
|
# One persistent objective lets boss victory flow through the same conquest
|
|
# state as authored capture-point maps without pretending the boss is a
|
|
# configurable capture point.
|
|
game_state.register_capture_points(game_state.planet_id, 1,
|
|
game_state.planet_definition_id)
|
|
if game_state.is_planet_conquered(game_state.planet_id):
|
|
boss.suppress_as_defeated()
|
|
status_label.text = "THE WARDEN IS DEAD"
|
|
hint_label.text = ""
|
|
return
|
|
boss.defeated.connect(_on_boss_defeated)
|
|
|
|
|
|
func _process(_delta: float) -> void:
|
|
if not is_instance_valid(boss) or boss.phase == boss.Phase.DEFEATED:
|
|
return
|
|
var phase_name: String = "PHASE II · LASER STORM" \
|
|
if boss.phase == boss.Phase.LASER_STORM else "PHASE I · HATCHLINGS"
|
|
status_label.text = "THE WARDEN · %s · EYES %d/%d" % [
|
|
phase_name, boss.eyes_destroyed, boss.EYE_COUNT]
|
|
hint_label.text = "DESTROY GOLDEN HATCHLINGS · FOLLOW THEIR LIGHT · BREAK THE OPEN EYES"
|
|
|
|
|
|
func _on_boss_defeated() -> void:
|
|
game_state.mark_point_captured(game_state.planet_id, 0)
|
|
status_label.text = "THE WARDEN IS DEAD · PLANET CONQUERED"
|
|
hint_label.text = ""
|