extends Node var game: Node2D var manager: Node func settle() -> void: await get_tree().process_frame await get_tree().process_frame func check_hint(expected: String) -> void: await settle() game.player.reset_physics_interpolation() game.player.get_node("Camera2D").force_update_scroll() await get_tree().physics_frame await RenderingServer.frame_post_draw manager._layout_prompt() assert(manager._prompt.visible) assert(manager._text.text.contains(expected)) assert(manager._prompt.size.y < 260 and manager._prompt.size.x <= 320) assert(manager._prompt.get_global_rect().encloses(manager._text.get_global_rect())) if manager._land_button.visible: assert(manager._prompt.get_global_rect().encloses(manager._land_button.get_global_rect())) assert(get_viewport().get_visible_rect().encloses(manager._prompt.get_global_rect())) func _ready() -> void: GameState.system_seed = 8428159 game = preload("res://scenes/game/game.tscn").instantiate() add_child(game) await settle() manager = game.get_node("PlanetExpeditions") var sprite: Sprite2D = manager.freighter.get_child(0) assert(is_equal_approx(maxf(sprite.texture.get_width(),sprite.texture.get_height())*sprite.scale.x,285.0)) var style := manager._prompt.get_theme_stylebox("panel") as StyleBoxFlat assert(style.bg_color.a > 0.75 and style.bg_color.a < 0.9) var contact := preload("res://scripts/ui/orbital_contact_style.gd") var extent := Vector2(300,180) var viewport := Vector2(1280,720) var center := Vector2(640,360) assert(contact.beside(center,90,extent,viewport) == Vector2(744,270)) var obstacle: Array[Rect2] = [Rect2(744,270,300,180)] assert(contact.beside(center,90,extent,viewport,obstacle).x < center.x) for edge in [Vector2(35,100),Vector2(1245,100),Vector2(35,620),Vector2(1245,620)]: assert(Rect2(Vector2.ZERO,viewport).encloses(Rect2(contact.beside(edge,90,extent,viewport),extent))) for enemy in get_tree().get_nodes_in_group("enemies"): enemy.position = Vector2(-9999,-9999) game.player.position = Vector2(10000,10000) game.player.landing_combat_lock = 100 var start := Time.get_ticks_usec() for frame in 1000: manager._process(0) var elapsed := Time.get_ticks_usec()-start assert(manager._text.text.is_empty() and not manager._prompt.visible) print("PROMPT BENCH: 1000 hidden combat refreshes=",elapsed," us; text chars=",manager._text.text.length()) game.player.position = game.protected_planet.position manager._process(0) assert(not manager._prompt.visible) for frame in 1000: manager._process(0) assert(not manager._prompt.visible) game.player.landing_combat_lock = 0 manager._process(0) await check_hint("EARTHLIKE") var blocker := get_tree().get_first_node_in_group("enemies") blocker.position = game.player.position+Vector2(100,0) manager._process(0) assert(not manager._prompt.visible) game.player.position = manager.freighter.position blocker.position = game.player.position+Vector2(100,0) manager._process(0) assert(not manager._prompt.visible) blocker.position = Vector2(-9999,-9999) game.player.position = game.protected_planet.position manager._process(0) await check_hint("EARTHLIKE") # Reproduce an oversized panel retained by an earlier combat warning. manager._prompt.size.y = 21054 manager._text.text = "Old oversized prompt" game.player.landing_combat_lock = 0 manager._process(0) await check_hint("EARTHLIKE") assert(not manager._land_button.disabled) manager.scan_nearby() manager._process(0) await check_hint("ŚREDNIA SZANSA POI") var camera: Camera2D = game.player.get_node("Camera2D") var previous_canvas := get_viewport().canvas_transform camera.enabled = false get_viewport().canvas_transform = Transform2D(0,Vector2(640,360)-game.protected_planet.global_position) manager._layout_prompt() var previous_position: Vector2 = manager._prompt.position get_viewport().canvas_transform = get_viewport().canvas_transform.translated(Vector2(70,0)) manager._layout_prompt() assert(manager._prompt.position.distance_to(previous_position) > 10,"Contact card follows the camera while text stays unchanged") get_viewport().canvas_transform = previous_canvas camera.enabled = true camera.force_update_scroll() await settle() manager._layout_prompt() if "--capture-preview" in OS.get_cmdline_user_args(): await RenderingServer.frame_post_draw get_viewport().get_texture().get_image().save_png("res://artifacts/planet_scan_stats.png") manager._message_time = 0 manager._process(0) await check_hint("TLEN") for visit in 10: game.player.position = manager.freighter.position manager._process(0) await check_hint("FRACHTOWIEC") assert(manager._land_button.text == "DOKUJ [L]") if visit == 0 and "--capture-preview" in OS.get_cmdline_user_args(): await RenderingServer.frame_post_draw get_viewport().get_texture().get_image().save_png("res://artifacts/freighter_prompt_fixed.png") game.player.position = game.protected_planet.position manager._process(0) await check_hint("TLEN") game.player.position = Vector2(10000,10000) manager._notice("Krótka wiadomość") manager._process(0) await check_hint("Krótka wiadomość") assert(not manager._land_button.visible) manager._message_time = 0 manager._process(0) assert(not manager._prompt.visible) print("PLANET PROMPT PASS: bounded text, combat, shrink, planet, freighter, scan, messages, on-screen content") game.queue_free() await settle() get_tree().quit()