60 lines
2.4 KiB
GDScript
60 lines
2.4 KiB
GDScript
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()
|