Files
settled-reach/client/scripts/autoloads/sim_bridge.gd
T
jpmschweitzerandClaude Opus 4.6 3368231396 fix(client): address PR review — input bug, bounds checks, fixture tests
- Fix input_mapper double-check bug (redundant InputEventKey + pressed filter)
- Add bounds checking for position arrays in entity_renderer and game_state
- Make test snapshot deterministic (incrementing counter, not wall clock)
- Fix tween overlap in monologue_display (cancel active tween before new one)
- Extract TILE_SIZE constant from magic number 32
- Add 5 D-030 Layer 1 fixture tests for snapshot parsing (7/7 total passing)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 17:53:24 +01:00

83 lines
2.1 KiB
GDScript

extends Node
# Connection states
enum ConnectionState { DISCONNECTED, CONNECTING, CONNECTED, ERROR }
var state: ConnectionState = ConnectionState.DISCONNECTED
var test_mode: bool = true # Enable test mode for development without Rust server
var _test_tick: int = 0
# Signals
signal connection_state_changed(old_state: ConnectionState, new_state: ConnectionState)
signal snapshot_received(snapshot: Dictionary)
func _ready() -> void:
if test_mode:
print("SimBridge: Running in test mode (hardcoded snapshot)")
# Change connection state and emit signal
func _set_state(new_state: ConnectionState) -> void:
if state != new_state:
var old_state = state
state = new_state
connection_state_changed.emit(old_state, new_state)
# Connect to simulation server (real implementation comes later)
func connect_to_sim() -> void:
_set_state(ConnectionState.CONNECTING)
# TODO: Actual connection logic when IPC/MessagePack is implemented
if test_mode:
_set_state(ConnectionState.CONNECTED)
else:
_set_state(ConnectionState.ERROR)
# Disconnect from simulation server
func disconnect_from_sim() -> void:
_set_state(ConnectionState.DISCONNECTED)
# Send input to simulation (real implementation comes later)
func send_input(player_input: Dictionary) -> void:
if state != ConnectionState.CONNECTED:
return
# TODO: Serialize and send via MessagePack when IPC is implemented
pass
# Poll for snapshot from simulation
func poll_snapshot() -> Variant:
if state != ConnectionState.CONNECTED:
return null
if test_mode:
var snapshot = _test_snapshot()
snapshot_received.emit(snapshot)
return snapshot
# TODO: Actual polling logic when IPC/MessagePack is implemented
return null
# Hardcoded test snapshot for development (deterministic per D-010 principle 4)
func _test_snapshot() -> Dictionary:
_test_tick += 1
return {
"tick": _test_tick,
"player": {
"position": [10, 10],
"health": 100
},
"entities": [
{
"id": 1,
"type": "npc",
"position": [12, 8],
"name": "Test NPC"
},
],
"fog": {
"radius": 8
},
"hud": {
"perception_mode": "baseline",
"time": "08:00"
}
}