From 15cf5cd0265a630d465b0613f44200799fa84a07 Mon Sep 17 00:00:00 2001 From: Atlaskor Date: Thu, 13 Nov 2025 15:48:48 +0000 Subject: [PATCH] Update server/static/main.js --- server/static/main.js | 45 ++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/server/static/main.js b/server/static/main.js index 7d5e8e9..caecbe7 100644 --- a/server/static/main.js +++ b/server/static/main.js @@ -7,7 +7,7 @@ import { MapView } from './map.js'; const socket = io(); -// global-ish state for modules +// shared state const state = { me: null, world: null, @@ -16,7 +16,6 @@ const state = { nodes: [] }; -// expose to UIs if they need it window.GameState = state; window.GameSocket = socket; @@ -33,11 +32,11 @@ class GameScene extends Phaser.Scene { } preload() { this.textures.generate('player', { data: ['333', '383', '333'], pixelWidth: 8 }); - this.textures.generate('other', { data: ['939', '999', '939'], pixelWidth: 8 }); - this.textures.generate('wood', { data: ['060', '660', '060'], pixelWidth: 8 }); - this.textures.generate('stone', { data: ['888', 'aaa', '888'], pixelWidth: 8 }); - this.textures.generate('ore', { data: ['a73', 'c95', 'a73'], pixelWidth: 8 }); - this.textures.generate('fiber', { data: ['6a6', '8c8', '6a6'], pixelWidth: 8 }); + this.textures.generate('other', { data: ['939', '999', '939'], pixelWidth: 8 }); + this.textures.generate('wood', { data: ['060', '660', '060'], pixelWidth: 8 }); + this.textures.generate('stone', { data: ['888', 'aaa', '888'], pixelWidth: 8 }); + this.textures.generate('ore', { data: ['a73', 'c95', 'a73'], pixelWidth: 8 }); + this.textures.generate('fiber', { data: ['6a6', '8c8', '6a6'], pixelWidth: 8 }); } create() { this.mapView = new MapView(this); @@ -57,14 +56,13 @@ class GameScene extends Phaser.Scene { if (res?.ok) { window.updateXP?.(res.level); window.addChatLine?.(`You gather 1 ${res.item} (+${res.xp} xp)`); - // inventory not re-fetched here for brevity } else if (res?.error) { window.addChatLine?.(`Gather failed: ${res.error}`); } }); }); - // socket updates hooked to MapView + // resource nodes from server socket.on('nodes:init', list => { state.nodes = list; this.mapView.replaceNodes(list); @@ -72,12 +70,14 @@ class GameScene extends Phaser.Scene { socket.on('node:update', u => { this.mapView.updateNode(u); }); + + // player positions socket.on('state', snap => { state.players = snap.players; this.mapView.updateOtherPlayers(snap.players); }); - // zoom from HUD + // HUD zoom hook window.setGameZoom = z => this.mapView.setZoom(z); } update(time, delta) { @@ -86,18 +86,18 @@ class GameScene extends Phaser.Scene { } async function boot() { - // mount UIs + // Mount UI modules setupAuthPanel(document.getElementById('ui-auth'), socket, bootAfterLogin); setupHUD(document.getElementById('ui-hud')); setupChat(document.getElementById('ui-chat'), socket); setupInventory(document.getElementById('ui-inventory')); setupCrafting(document.getElementById('ui-crafting')); - // attempt auto-login + // auto-login attempt const meData = await fetchMe(); if (!meData) { - // show auth - document.getElementById('ui-auth').firstElementChild?.classList.remove('hidden'); + const authPanel = document.getElementById('ui-auth').firstElementChild; + if (authPanel) authPanel.classList.remove('hidden'); return; } await bootAfterLogin(); @@ -110,18 +110,19 @@ async function bootAfterLogin() { state.inventory = data.inventory; state.world = data.world; - // join socket world + // join world socket await new Promise(resolve => { - socket.emit('auth:join', ack => { - resolve(ack); - }); + socket.emit('auth:join', ack => resolve(ack)); }); - document.getElementById('ui-auth').innerHTML = ''; // hide auth - document.getElementById('ui-hud').firstElementChild?.classList.remove('hidden'); - document.getElementById('ui-chat').firstElementChild?.classList.remove('hidden'); + // show HUD + chat; hide auth + document.getElementById('ui-auth').innerHTML = ''; + const hudPanel = document.getElementById('ui-hud').firstElementChild; + if (hudPanel) hudPanel.classList.remove('hidden'); + const chatPanel = document.getElementById('ui-chat').firstElementChild; + if (chatPanel) chatPanel.classList.remove('hidden'); - // start Phaser game + // start Phaser const config = { type: Phaser.AUTO, parent: 'game',