## LagCompensation — records player position history for hit-scan rewinding. ## Minimal stub for server startup compatibility. ## Full implementation to be built when hitscan system is wired. extends Node ## class_name LagCompensation — commented out for headless compatibility var physics_world = null var _history: Dictionary = {} # tick → { entity_id: position } ## Record the start of a new tick for lag compensation. ## Called by GameServer each tick before processing inputs. ## Individual player positions are recorded by the game server loop. func record_tick(tick: int) -> void: _history[tick] = {} ## Record a player's position at a given tick (used during per-entity processing). func record_position(tick: int, entity_id: int, position: Vector3) -> void: if not _history.has(tick): _history[tick] = {} _history[tick][entity_id] = position if _history.size() > 128: var oldest = _history.keys().min() if oldest != null: _history.erase(oldest) func rewind_and_raycast(tick: int, origin: Vector3, direction: Vector3, max_range: float, exclude: Array = []) -> Dictionary: # Stub: fall back to current-frame raycast if physics_world == null: return {} var space_state = physics_world.direct_space_state if space_state == null: return {} var query = PhysicsRayQueryParameters3D.create(origin, origin + direction * max_range) query.exclude = exclude return space_state.intersect_ray(query)