extends SceneTree # Headless gameplay test: run with # godot --headless -s res://tests/test_exploration_tracker.gd # Verifies ExplorationTracker marks the fleet's current chunk as explored # once the fleet is there, while a distant chunk the fleet never visited # stays unexplored - this is what lets the world map reveal only chunks # actually seen instead of the whole generated world at once. var main_scene: Node var fleet: Node var tracker: Node var elapsed: float = 0.0 var teleported: bool = false func _initialize() -> void: var packed: PackedScene = load("res://world/Main.tscn") main_scene = packed.instantiate() root.add_child(main_scene) fleet = main_scene.get_node("Fleet") tracker = main_scene.get_node("ExplorationTracker") func _process(delta: float) -> bool: if not teleported: # Wait one tick so Fleet._ready() has run and fleet.ships is # populated before we try to teleport them - reposition attempted # synchronously in _initialize() would silently no-op on an empty # ships array. var target_pos: Vector2 = Vector2(5000, -3000) for ship in fleet.ships: ship.position = target_pos fleet.move_to(target_pos) teleported = true return false elapsed += delta if elapsed < 0.2: return false var visited_chunk: Vector2i = WorldGen.chunk_coords(Vector2(5000, -3000)) var far_chunk: Vector2i = Vector2i(9999, 9999) var explored: Array = tracker.get_explored_chunks() var visited_ok: bool = explored.has(visited_chunk) var far_unexplored: bool = not explored.has(far_chunk) print("visited_chunk=%s in_explored=%s far_chunk=%s in_explored=%s" % [ visited_chunk, visited_ok, far_chunk, not far_unexplored ]) if visited_ok and far_unexplored: print("TEST_EXPLORATION_TRACKER: PASS") quit(0) else: print("TEST_EXPLORATION_TRACKER: FAIL") quit(1) return true