extends Node func _ready() -> void: GameState.system_seed = 8428159 var game := preload("res://scenes/game/game.tscn").instantiate() add_child(game) await get_tree().process_frame var manager := game.get_node("PlanetExpeditions") for enemy in get_tree().get_nodes_in_group("enemies"): enemy.position = Vector2(9000,9000) game.player.position = game.protected_planet.position game.player.landing_combat_lock = 0 manager.scan_nearby() manager.land_nearby() var surface: Control = manager.screen assert(surface.lander.physics_interpolation_mode == Node.PHYSICS_INTERPOLATION_MODE_ON) assert(surface.lander.texture_filter == CanvasItem.TEXTURE_FILTER_LINEAR_WITH_MIPMAPS) # Deliberately separate physics and render rates to expose stepping. Engine.physics_ticks_per_second = 20 Engine.max_fps = 120 DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED) surface._motion.velocity = Vector2(160,0) var previous_physics: Vector2 = surface.lander.position var previous_render := previous_physics var interpolated_frames := 0 var frame_times: Array[float] = [] var start := Time.get_ticks_usec() var last := start for frame in 180: await RenderingServer.frame_post_draw var now := Time.get_ticks_usec() if frame > 20: frame_times.append((now-last)/1000.0) last = now var pose: Vector2 = surface.camera.position if surface.lander.position.is_equal_approx(previous_physics) and not pose.is_equal_approx(previous_render): interpolated_frames += 1 previous_physics = surface.lander.position previous_render = pose assert(interpolated_frames > 20) Engine.physics_ticks_per_second = 60 frame_times.sort() print("LANDER RENDER PASS: interpolated intermediate frames=",interpolated_frames, "; median frame ms=",frame_times[frame_times.size()/2], "; p95 ms=",frame_times[int(frame_times.size()*0.95)]) surface.lander.position = Vector2.ZERO surface._previous_position = Vector2.ZERO surface.lander.rotation = 0 surface._motion.velocity = Vector2.ZERO surface._motion.rotation = 0 surface.lander.reset_physics_interpolation() surface.camera.position = Vector2.ZERO surface.camera.reset_smoothing() await get_tree().process_frame await RenderingServer.frame_post_draw get_viewport().get_texture().get_image().save_png("res://artifacts/lander_sharp_preview.png") manager.finish_surface(true) game.queue_free() await get_tree().process_frame get_tree().quit()