93 lines
4.0 KiB
GDScript
93 lines
4.0 KiB
GDScript
extends Node
|
|
const EVENTS := preload("res://scripts/planets/surface_events.gd")
|
|
|
|
func settle() -> void:
|
|
for frame in 4:
|
|
await get_tree().process_frame
|
|
await RenderingServer.frame_post_draw
|
|
|
|
func _ready() -> void:
|
|
GameState.system_level = 3
|
|
GameState.captain.credits = 100000
|
|
GameState.captain.parts = 100
|
|
for key in ["iron","copper","nickel","silicon","tungsten","mercury","sulfur","uranium"]:
|
|
GameState.captain.minerals[key] = 100
|
|
var profile: Dictionary = preload("res://scripts/planets/planet_profiles.gd").generate(777,1,"Spotkania na powierzchni")
|
|
var hard := "--hard" in OS.get_cmdline_user_args()
|
|
var prefix := "hard_" if hard else ""
|
|
profile.temperature = 100 if hard else 20
|
|
profile.oxygen = 0 if hard else 95
|
|
profile.flora = 50 if hard else 0
|
|
profile.difficulty = 1.0 if hard else 0.0
|
|
profile.easy = not hard
|
|
var progress: Resource = GameState.captain.expedition
|
|
assert(progress.begin_visit(profile))
|
|
progress.visit_seed = 0
|
|
var surface := Control.new()
|
|
surface.set_script(preload("res://scripts/planets/surface_screen.gd"))
|
|
surface.captain = GameState.captain
|
|
surface.progress = progress
|
|
add_child(surface)
|
|
surface.set_process(false)
|
|
surface.set_physics_process(false)
|
|
assert(surface.world.data.events.size() == 1)
|
|
var event: Dictionary = surface.world.data.events[0]
|
|
var at: Vector2 = event.position
|
|
surface.lander.position = at+Vector2(-100,0)
|
|
surface._previous_position = surface.lander.position
|
|
surface.camera.position = surface.lander.position
|
|
surface.camera.reset_smoothing()
|
|
var sheet := Image.create(1280,1800,false,Image.FORMAT_RGBA8)
|
|
for index in EVENTS.KINDS.size():
|
|
event.clear()
|
|
event.merge({"kind":EVENTS.KINDS[index],"seed":101+index,"position":at,"complete":false,"discovered":true})
|
|
surface._dialog.hide()
|
|
surface._event_armed = true
|
|
surface._check_events()
|
|
assert(surface._dialog.visible)
|
|
var snapshot := var_to_str(EVENTS.options(event,GameState.captain,progress))
|
|
surface._dialog.hide()
|
|
surface._show_event(event)
|
|
assert(snapshot == var_to_str(EVENTS.options(event,GameState.captain,progress)))
|
|
await settle()
|
|
assert(surface._dialog.position.y+surface._dialog.size.y <= get_viewport().get_visible_rect().size.y)
|
|
var screenshot := get_viewport().get_texture().get_image()
|
|
screenshot.save_png("res://artifacts/%sevent_%s.png" % [prefix,event.kind])
|
|
screenshot.convert(Image.FORMAT_RGBA8)
|
|
screenshot.resize(640,360,Image.INTERPOLATE_LANCZOS)
|
|
sheet.blit_rect(screenshot,Rect2i(0,0,640,360),Vector2i(index%2*640,index/2*360))
|
|
if event.kind == "trader":
|
|
var pressed := false
|
|
for child in surface._choices.get_children():
|
|
if child is Button and child.text.begins_with("Kup ") and child.text.contains("rakiet"):
|
|
child.pressed.emit()
|
|
pressed = true
|
|
break
|
|
assert(pressed and event.complete and progress.cargo_missiles == event.missile_count)
|
|
if event.kind == "scan_cache":
|
|
surface._event_action("scan")
|
|
assert(event.scanned and not event.complete)
|
|
await settle()
|
|
get_viewport().get_texture().get_image().save_png("res://artifacts/%sevent_scan_result.png" % prefix)
|
|
if event.kind == "evacuation":
|
|
event.rolls = [0.0,0.0,0.0]
|
|
surface._event_action("help")
|
|
assert(event.stage == 1 and not event.complete)
|
|
await settle()
|
|
get_viewport().get_texture().get_image().save_png("res://artifacts/%sevent_evacuation_stage2.png" % prefix)
|
|
sheet.save_png("res://artifacts/%sevents_overview.png" % prefix)
|
|
# Lethal event damage follows the same destruction path as a failed POI.
|
|
event.clear()
|
|
event.merge({"kind":"rescue","seed":333,"position":at,"complete":false})
|
|
EVENTS.prepare(event,GameState.captain,progress)
|
|
event.rolls = [1.0,1.0,1.0]
|
|
progress.lander_hp = 1
|
|
var ended := []
|
|
surface.finished.connect(func(success: bool): ended.append(success))
|
|
await surface._event_action("rescue")
|
|
assert(surface._ending and not surface.lander.visible and ended == [false])
|
|
progress.finish_visit(GameState.captain,false)
|
|
surface.queue_free()
|
|
print("EVENT UI PASS: ten dialogs, auto-open, fixed reopened offers, purchase button, scan, evacuation, bounds, lethal damage")
|
|
get_tree().quit()
|