64 lines
3.1 KiB
GDScript
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()
|