Restore saved player position on reconnect

This commit is contained in:
Jage9
2026-02-24 21:08:48 -05:00
parent 6eb83d6df4
commit 503ba63a24
3 changed files with 22 additions and 3 deletions

View File

@@ -9,6 +9,7 @@ type MessageHandlerDeps = {
setWorldGridSize: (size: number) => void;
setMovementTickMs: (value: number) => void;
setConnecting: (value: boolean) => void;
getPersistedPlayerPosition: () => { x: number; y: number } | null;
rendererSetGridSize: (size: number) => void;
applyServerItemUiDefinitions: (defs: unknown) => boolean;
state: {
@@ -97,8 +98,11 @@ export function createOnMessageHandler(deps: MessageHandlerDeps): (message: Inco
deps.state.player.id = message.id;
deps.state.running = true;
deps.setConnecting(false);
deps.state.player.x = Math.max(0, Math.min(deps.getWorldGridSize() - 1, message.player.x));
deps.state.player.y = Math.max(0, Math.min(deps.getWorldGridSize() - 1, message.player.y));
const persistedPosition = deps.getPersistedPlayerPosition();
const targetX = persistedPosition?.x ?? message.player.x;
const targetY = persistedPosition?.y ?? message.player.y;
deps.state.player.x = Math.max(0, Math.min(deps.getWorldGridSize() - 1, targetX));
deps.state.player.y = Math.max(0, Math.min(deps.getWorldGridSize() - 1, targetY));
deps.dom.nicknameContainer.classList.add('hidden');
deps.dom.connectButton.classList.add('hidden');
deps.dom.disconnectButton.classList.remove('hidden');