90 lines
3.6 KiB
GDScript
90 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()
|
|
manager.scan_nearby()
|
|
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()
|