spaceship/tests/test_exploration_tracker.gd
Loïc Wisniewski 85814ce88c Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).

All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.

Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.

Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00

59 lines
1.8 KiB
GDScript

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://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