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

82 lines
3.7 KiB
GDScript

extends Node
func settle() -> void:
for frame in 4:
await get_tree().process_frame
await RenderingServer.frame_post_draw
func teleport(surface: Control, at: Vector2) -> void:
surface.lander.position = at
surface._previous_position = at
surface.lander.reset_physics_interpolation()
surface.camera.position = at
surface.camera.reset_smoothing()
surface.world.refresh_pois(at)
func _ready() -> void:
GameState.system_seed = 8428159
GameState.captain.credits = 500
var game := preload("res://scenes/game/game.tscn").instantiate()
add_child(game)
await settle()
get_viewport().get_texture().get_image().save_png("res://artifacts/space_ship_comparison.png")
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
var found_seed := 0
for index in range(200,240):
var data: Dictionary = preload("res://scripts/planets/surface_generator.gd").generate(index,planet.planet_profile)
if not data.events.is_empty():
found_seed = index
break
assert(found_seed > 0)
planet.planet_profile.seed = found_seed ^ 7919
game.player.position = planet.position
game.player.landing_combat_lock = 0
manager.land_nearby()
var surface: Control = manager.screen
assert(surface.camera.zoom.is_equal_approx(Vector2.ONE*0.8*surface.SURFACE_RENDER_SCALE))
assert(surface.world.data.structures.size() <= 5 and surface.world.data.events.size() == 1)
assert(surface._surface_viewport.size == Vector2i(1920,1080))
for event_nodes in surface.world._event_nodes:
assert(event_nodes.size() == 1 and event_nodes.has("marker"))
var event: Dictionary = surface.world.data.events[0]
event.kind = "trader"
teleport(surface,event.position+Vector2(0,220))
await settle()
get_viewport().get_texture().get_image().save_png("res://artifacts/planet_scenery_event_marker.png")
teleport(surface,event.position+Vector2(0,100))
surface._check_events()
assert(surface._dialog.visible)
await settle()
get_viewport().get_texture().get_image().save_png("res://artifacts/trader_event_offer.png")
var purchase: Button
for child in surface._choices.get_children():
if child is Button and child.text.begins_with("Kup ") and child.text.contains("rakiet"):
purchase = child
assert(purchase != null and not purchase.disabled)
purchase.pressed.emit()
assert(event.complete and GameState.captain.credits == 500-int(event.missile_price))
assert(surface.progress.cargo_missiles == int(event.missile_count))
await settle()
get_viewport().get_texture().get_image().save_png("res://artifacts/trader_event_result.png")
var keys: Array = preload("res://scripts/planets/surface_scenery.gd").KINDS.duplicate()
keys.append("engineer_camp")
var sheet := Image.create(1280,640,false,Image.FORMAT_RGBA8)
sheet.fill(Color("15252e"))
for index in keys.size():
var texture: Texture2D = load("res://assets/planets/props/%s.png" % keys[index])
var image: Image = texture.get_image()
if image.is_compressed(): image.decompress()
image.convert(Image.FORMAT_RGBA8)
assert(image.get_pixel(0,0).a < 0.01)
var scale_value := minf(285.0/image.get_width(),285.0/image.get_height())
image.resize(roundi(image.get_width()*scale_value),roundi(image.get_height()*scale_value),Image.INTERPOLATE_LANCZOS)
sheet.blend_rect(image,Rect2i(Vector2i.ZERO,image.get_size()),Vector2i(index%4*320+(320-image.get_width())/2,index/4*320+(320-image.get_height())/2))
sheet.save_png("res://artifacts/surface_props_sheet.png")
manager.finish_surface(true)
game.queue_free()
await get_tree().process_frame
print("SURFACE SCENERY UI PASS: zoom, props, transparency, automatic event dialog, discounted rockets, temporary expedition cargo")
get_tree().quit()