Fix boss planet landing controls

This commit is contained in:
Loïc Wisniewski 2026-09-03 22:21:11 +02:00
commit 471a43e8a6
3 changed files with 12 additions and 21 deletions

View file

@ -21,5 +21,5 @@ func _ready() -> void:
var surface: Node = load("res://surface/PlanetSurface.tscn").instantiate()
add_child(surface)
surface.get_node("FadeOverlay/FadeRect").visible = false
# Four screenshot frames are nowhere near enough for the automatic
# approach to cover 950 world units, so the signal remains off-screen.
# Four screenshot frames leave the fleet at its landing point, so the
# signal remains off-screen until the player chooses to follow it.

View file

@ -8,7 +8,7 @@ extends SceneTree
# scripted profile is excluded from the map editor
# B. landing composes BossEncounter instead of a PlanetSetup and does not
# mark the world conquered for free
# C. the off-screen approach locks movement and reveals with its own cue
# C. the off-screen approach remains controllable and reveals with its own cue
# D. waves are larger, expelled outward, varied, and golden only 1/3 times
# E. killing the marked hatchling sends a visible return to the boss and
# opens an attackable tentacle eye
@ -119,14 +119,16 @@ func _process(delta: float) -> bool:
return _fail("boss combat UI is visible before the boss enters view")
if not encounter.indicator.visible or not encounter.indicator_label.visible:
return _fail("the off-screen boss has no directional border indicator")
if not state.encounter_locks_movement or boss.combat_active:
return _fail("the approach did not take temporary control or already started combat")
# Put the camera where the automatic approach eventually carries it;
# the encounter itself must detect the boss crossing into view.
if state.encounter_locks_movement or boss.combat_active:
return _fail("the off-screen approach locked player movement or already started combat")
# Put the camera where the player can carry the fleet; the encounter
# itself must detect the boss crossing into view.
surface.get_node("Camera2D").global_position = boss.global_position + Vector2(0.0, 1000.0)
encounter._process(0.0)
if not encounter.reveal_started:
return _fail("bringing the boss into view did not trigger its reveal")
if not state.encounter_locks_movement:
return _fail("the reveal did not briefly lock movement for the cinematic")
if not encounter.health_bar.visible or encounter.indicator.visible:
return _fail("the reveal did not exchange the indicator for the health UI")
var scream_heard: bool = false