Commit Graph
8 Commits
Author SHA1 Message Date
tiennm99 e8281e5411 chore(client): split menu-ui into lobby and rooms modules
menu-ui.js exceeded 200-line limit. Extract room-list, PVE difficulty panel,
and waiting-room into menu-ui-rooms.js. menu-ui.js re-exports showRoomList
and showWaiting so menu-scene.js import paths are unchanged.
2026-04-11 14:55:04 +07:00
tiennm99 2d917d5d85 feat(client): dom menu-ui and game-ui with role-aware waiting room
menu-ui.js: nickname screen, lobby, PVP/PVE submenus, room list table,
role-aware showWaiting() — owner gets Start Game button (disabled until
playerCount=2); joiner gets passive wait message. Returns update() handle
for live ROOM_JOIN_SUCCESS pushes from menu-scene. All user strings set
via textContent for XSS safety.

game-ui.js: game HUD with turn indicator dots, scrollable move history,
showGameOver modal with Play Again (sendGameReset) and Leave buttons,
showToast auto-dismissing after 2s into #toast-container. Error toasts
wired for all GAME_MOVE_* and spectator-cannot-act events.
2026-04-11 14:49:04 +07:00
tiennm99 4c59ee0f83 feat(client): phaser board and stone objects with drop-in animation
Replace phase-09 stubs with real Phaser.GameObjects.Graphics implementations.
Board draws wood-textured 15x15 grid with star points and coordinate labels.
Stone renders gradient black/white circle with 180ms Back.easeOut drop tween.
createLastMoveMarker draws a red filled circle at the last-played intersection.
menu-scene.js wired for live waiting-room updates and role-aware showWaiting.
2026-04-11 14:48:55 +07:00
tiennm99 2c37c8f4ef feat(client): boot/menu/game scenes wired to event bus and protobuf dispatch
- boot-scene: connects WS, waits for NICKNAME_SET then starts MenuScene
- menu-scene: subscribes to CLIENT_CONNECT/NICKNAME_SET/SHOW_OPTIONS/SHOW_ROOMS/
  ROOM_CREATE_SUCCESS/ROOM_JOIN_SUCCESS/ROOM_JOIN_FAIL_*/GAME_STARTING; delegates
  to menu-ui stubs; proper shutdown() unsubscribes all handlers
- game-scene: Board+Stone stub integration, hover preview, click→sendGameMove,
  GAME_MOVE_SUCCESS/GAME_OVER/CLIENT_EXIT/GAME_STARTING/SPECTATOR_CANNOT_ACT/
  move error events all wired; audio feedback; shutdown() cleanup
2026-04-11 13:41:40 +07:00
tiennm99 6b2035632f feat(client): event-bus, connection-service, game-state-service with typed protobuf
- event-bus: pub/sub singleton with on/once/off/emit
- connection-service: WS wrapper for ws://host:1999/gomoku, binary protobuf
  encode/decode, 50s heartbeat, exponential backoff reconnect (max 10 attempts),
  14 typed send helpers including sendGameStarting() (owner-only explicit start)
- game-state-service: client-side state container wired to all ClientEventCode
  events; exposes isMyTurn(), currentPlayerNickname(), isOccupied()
- menu-ui, game-ui: no-op stubs for phase-10 to replace
- board, stone: minimal stub classes so GameScene compiles without real Phaser objects
2026-04-11 13:41:32 +07:00
tiennm99 a5acd69b87 feat(client): phaser+vite bootstrap with html shell, game config, and scene stubs
- index.html: dark shell with #game-container (Phaser canvas parent),
  #ui-overlay containing #menu-root, #game-hud-root, #toast-container
- vite.config.js: port 5173, strictPort, sourcemap build, no GitHub Pages base
- src/main.js: instantiates Phaser.Game from gameConfig
- src/config/game-config.js: 800x800 FIT canvas, parent=game-container, scene list
- src/config/protocol-constants.js: ClientEventCode enum aligned to response.proto
  oneofs; adds SPECTATOR_CANNOT_ACT, renames GAME_WATCH_SUCCESSFUL to
  WATCH_GAME_SUCCESS, drops CLIENT_KICK (no proto case)
- src/scenes/boot-scene.js|menu-scene.js|game-scene.js: minimal stubs for Phaser
  scene registry; phase-09 replaces them with real implementations
2026-04-11 12:48:07 +07:00
tiennm99 a5d1443327 feat(client): initial package.json and generated protobuf bindings
Adds Phaser+Vite+protobufjs package.json with proto:gen script, installs
dependencies, and commits generated protocol.js and protocol.d.ts so
builds work without requiring protoc or pbjs on every dev box.
Also adds node_modules/ to root .gitignore.
2026-04-11 12:41:06 +07:00
tiennm99 1ce619ba4c chore: add skeleton directories for future phases
common/proto/, server/game/, server/protocol/, client/src/{config,scenes,
services,objects,ui,generated} — all .gitkeep placeholders.
2026-04-11 12:07:25 +07:00