Randoloot/tests/levels/orbital_prompt_recovery_test.gd
2026-10-25 12:34:56 +01:00

69 lines
2.8 KiB
GDScript

extends Node
func _ready() -> void:
GameState.start_new_run()
GameState.system_seed = 8428159
var game := preload("res://scenes/game/game.tscn").instantiate()
add_child(game)
game.set_physics_process(false)
game.player.set_physics_process(false)
game.player.get_node("WeaponController").set_physics_process(false)
var manager: Node = game.get_node("PlanetExpeditions")
manager.set_process(false)
for enemy in get_tree().get_nodes_in_group("enemies"):
enemy.set_physics_process(false)
enemy.position = Vector2(-9999,-9999)
await get_tree().process_frame
for target in [manager.freighter,game.protected_planet]:
game.player.position = target.position
game.player.landing_combat_lock = 0.0
manager._process(0.11)
assert(manager._prompt.visible)
var position: Vector2 = game.player.position
for repetition in 3:
game.player.landing_combat_lock = 0.05
manager._process(0.016)
assert(not manager._prompt.visible)
manager.land_nearby()
assert(not is_instance_valid(manager.screen))
assert(manager._message_time == 0.0,"Combat cannot leave a stale warning over the docking card")
game.player.landing_combat_lock = 0.0
manager._process(0.016)
assert(manager._prompt.visible,"Timer expiration restores the card without movement")
assert(not manager._land_button.disabled)
if target == game.protected_planet:
assert(manager._text.text.contains("TLEN") and manager._text.text.contains("ŚREDNIA SZANSA POI"))
assert(GameState.captain.expedition.scans.has(target.planet_profile.id))
assert(manager._prompt.find_children("*","Button",true,false).size()==1,"Only the land/dock button remains")
assert(game.player.position == position)
var enemy: Node2D = get_tree().get_first_node_in_group("enemies")
enemy.position = position+Vector2(100,0)
enemy.hull = 100.0
manager._process(0.016)
assert(not manager._prompt.visible)
enemy.hull = 0.0
manager._process(0.016)
assert(manager._prompt.visible,"Dead ships cannot keep docking blocked")
enemy.hull = 100.0
manager._process(0.016)
assert(not manager._prompt.visible)
enemy.queue_free()
manager._process(0.016)
assert(manager._prompt.visible,"Queued enemies cannot keep docking blocked")
get_tree().paused = true
manager._process(0.016)
assert(not manager._prompt.visible)
get_tree().paused = false
manager._process(0.016)
assert(manager._prompt.visible,"Resuming restores the card without movement")
await get_tree().process_frame
game.player.position = manager.freighter.position
manager._process(0.11)
manager.land_nearby()
assert(is_instance_valid(manager.screen) and get_tree().paused)
manager._leave()
manager._process(0.016)
assert(manager._prompt.visible and not get_tree().paused)
print("ORBITAL_PROMPT_RECOVERY_TEST: PASS (stationary freighter/planet; combat lock expiry; live/dead/queued enemies; pause and docking)")
game.queue_free()