feat(client): initialize Godot 4 project boilerplate (epic #277)

Set up the complete Godot 4.6 client foundation as a pure renderer (D-020):
- project.godot with 2D rendering, autoloads, input actions
- Main scene: Game > World (TileMapLayer, Entities, FogOverlay) + Camera2D + UILayer
- Autoloads: SimBridge (connection state machine + test mode), GameState, InputMapper
- Rendering stubs: WorldRenderer, EntityRenderer, FogRenderer
- UI stubs: HUD (health/perception/time), Minimap, MonologueDisplay
- Input mapping: WASD/arrows, E (interact), Tab (perception), Esc (menu), Space (pause)
- gdUnit4 smoke tests: scene loads, autoloads registered (2/2 passing)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-11 16:52:27 +01:00
co-authored by Claude Opus 4.6
parent 61e0762a84
commit 603c24e177
34 changed files with 656 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
extends Node2D
@onready var world_renderer = $World
@onready var hud = $UILayer/HUD
func _ready() -> void:
print("The Settled Reach — client initialized")
# Connect to simulation (will use test mode initially)
SimBridge.connect_to_sim()
func _process(_delta: float) -> void:
# Main game loop: poll snapshot, apply state, flush input
var snapshot = SimBridge.poll_snapshot()
if snapshot != null:
GameState.apply_snapshot(snapshot)
# Update renderers with new state
if world_renderer and world_renderer.has_method("update_from_state"):
world_renderer.update_from_state()
# Update HUD
if hud and hud.has_method("update_from_hud_data"):
hud.update_from_hud_data(GameState.hud_data)
if snapshot.has("player") and snapshot.player.has("health"):
hud.update_health(snapshot.player.health)
# Send queued input to simulation
var inputs = InputMapper.flush_queue()
for input in inputs:
SimBridge.send_input(input)