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

89 lines
3.6 KiB
GDScript

extends Node
const PROFILES := preload("res://scripts/planets/planet_profiles.gd")
const EVENTS := preload("res://scripts/planets/surface_events.gd")
var sheet: Image
var panel_index := 0
func settle() -> void:
for frame in 5:
await get_tree().process_frame
await RenderingServer.frame_post_draw
func capture(name: String) -> void:
await settle()
var screenshot := get_viewport().get_texture().get_image()
screenshot.save_png("res://artifacts/threat_%s.png" % name)
screenshot.convert(Image.FORMAT_RGBA8)
screenshot.resize(640,360,Image.INTERPOLATE_LANCZOS)
sheet.blit_rect(screenshot,Rect2i(0,0,640,360),Vector2i(panel_index%2*640,panel_index/2*360))
panel_index += 1
func _ready() -> void:
GameState.system_seed = 8428159
var game := preload("res://scenes/game/game.tscn").instantiate()
add_child(game)
await settle()
var manager := game.get_node("PlanetExpeditions")
for enemy in get_tree().get_nodes_in_group("enemies"):
enemy.position = Vector2(9999,9999)
var planet: Node2D = game.protected_planet
game.player.position = planet.position
game.player.landing_combat_lock = 0
var profile: Dictionary = planet.planet_profile
sheet = Image.create(1280,1080,false,Image.FORMAT_RGBA8)
for scenario in [{"name":"scan_safe","rank":1,"oxygen":98,"temperature":30,"flora":0,"difficulty":0.0},{"name":"scan_150","rank":25,"oxygen":0,"temperature":100,"flora":50,"difficulty":1.0},{"name":"scan_l50","rank":50,"oxygen":0,"temperature":100,"flora":50,"difficulty":1.0}]:
profile.oxygen = scenario.oxygen
profile.temperature = scenario.temperature
profile.flora = scenario.flora
profile.difficulty = scenario.difficulty
profile.easy = scenario.difficulty == 0
profile.landing_damage = 5 if profile.easy else 20
for gear in GameState.captain.gear_items:
gear.level = scenario.rank
GameState.captain.emit_changed()
await capture(scenario.name)
assert(manager._text.text.contains("ŚREDNIA SZANSA POI"))
assert(get_viewport().get_visible_rect().encloses(manager._prompt.get_global_rect()))
if scenario.rank == 1 or scenario.rank == 50:
assert(manager._text.text.contains("66.7%"))
else:
assert(manager._text.text.contains("6.7%"))
for gear in GameState.captain.gear_items:
gear.level = 25
GameState.captain.emit_changed()
manager.land_nearby()
var surface: Control = manager.screen
assert(surface != null)
surface.set_process(false)
surface.set_physics_process(false)
var poi: Dictionary = surface.world.data.pois[0]
poi.stage = 2
surface._poi = poi
surface._show_poi()
var blocked_poi := false
for child in surface._choices.get_children():
if child is Button and child.text.contains("0.00% szans"):
assert(child.disabled)
blocked_poi = true
assert(blocked_poi)
await capture("zero_chance_poi")
var event := {"kind":"evacuation","seed":77,"position":Vector2.ZERO,"complete":false}
EVENTS.prepare(event,GameState.captain,surface.progress)
event.stage = 2
surface._show_event(event)
var blocked_event := false
for child in surface._choices.get_children():
if child is Button and child.text.begins_with("Etap 3/3"):
assert(child.disabled)
blocked_event = true
assert(blocked_event)
await capture("zero_chance_event")
surface._show_event({"kind":"rescue","seed":78,"position":Vector2.ZERO,"complete":false})
await capture("rescue_150")
sheet.save_png("res://artifacts/threat_system_overview.png")
manager.finish_surface(true)
game.queue_free()
await get_tree().process_frame
print("THREAT UI PASS: three prelanding scans, visible averaged odds, L50 mitigation, on-screen prompt, disabled zero-chance POI and event, rescue threat")
get_tree().quit()