Randoloot/tests/previews/landscape_preview.gd

64 lines
3.1 KiB
GDScript

extends Node
func _ready() -> void:
if not InputMap.has_action("ship_mini_boost"):
InputMap.add_action("ship_mini_boost")
var palette_names := {}
var sheet := Image.create(1280,1080,false,Image.FORMAT_RGBA8)
var progress: Resource = GameState.captain.expedition
for index in 6:
var profile: Dictionary = preload("res://scripts/planets/planet_profiles.gd").generate(99,index,"Krajobraz %d" % (index+1))
profile.temperature = 75 if index==4 else (-35 if index==5 else 20)
profile.easy = index<4
profile.oxygen = 90
profile.flora = 0
progress.lander_hp = 100
assert(progress.begin_visit(profile))
progress.visit_seed = 200+index
var surface := Control.new()
surface.set_script(preload("res://scripts/planets/surface_screen.gd"))
surface.captain = GameState.captain
surface.progress = progress
add_child(surface)
var material: ShaderMaterial = surface.world.get_node("Terrain").material
if "--debug-region" in OS.get_cmdline_user_args():
var diagnostic := material.shader.duplicate() as Shader
diagnostic.code = diagnostic.code.replace("COLOR=vec4(mix(shore*shade,water,lake),1.0);","COLOR=vec4(vec3(region),1.0);")
material.shader = diagnostic
for kind in ["soil","rock","sand","moss"]:
var texture: Texture2D = material.get_shader_parameter(kind+"_detail")
assert(texture != null and texture.get_width() >= 1024)
var target: Vector2 = surface.world.data.structures[0].position if not surface.world.data.structures.is_empty() else surface.world.data.pois[0].position
target = target.clamp(Vector2(-1200,-1200),Vector2(1200,1200))
surface.lander.position = target
surface._previous_position = target
surface.lander.reset_physics_interpolation()
surface.camera.position = target
surface.camera.reset_smoothing()
palette_names[surface.world.data.landscape.name] = true
for frame in 4:
await get_tree().process_frame
await RenderingServer.frame_post_draw
var screenshot: Image = get_viewport().get_texture().get_image()
screenshot.save_png("res://artifacts/%sterrain_detail_%d.png" % ["debug_" if "--debug-region" in OS.get_cmdline_user_args() else "",index])
if index == 0 and "--debug-region" in OS.get_cmdline_user_args():
var seams := 0
for y in range(220,600,2):
for x in range(480,1000):
var a := screenshot.get_pixel(x,y)
var b := screenshot.get_pixel(x+1,y)
if absf(a.r-a.g)<0.0005 and absf(a.g-a.b)<0.0005 and absf(b.r-b.g)<0.0005 and absf(b.g-b.b)<0.0005 and absf(a.r-b.r)>0.07:
seams += 1
assert(seams < 20)
print("TERRAIN NOISE CONTINUITY PASS: abrupt grayscale edges=",seams)
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))
progress.finish_visit(GameState.captain,true)
surface.queue_free()
await get_tree().process_frame
assert(palette_names.size() == 6)
if not "--debug-region" in OS.get_cmdline_user_args():
sheet.save_png("res://artifacts/terrain_material_variants_final.png")
print("LANDSCAPE PREVIEW PASS: six distinct terrain styles with four detailed material textures rendered")
get_tree().quit()