fix: Resolve React hooks violation, implement player waiting screen, and auto-start game upon deck submission.
This commit is contained in:
28
docs/development/devlog/2025-12-14-233000_fix_submit_deck.md
Normal file
28
docs/development/devlog/2025-12-14-233000_fix_submit_deck.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# Fix Submit Deck Button
|
||||
|
||||
## Issue
|
||||
Users reported that "Submit Deck" button was not working.
|
||||
|
||||
## Root Causes
|
||||
1. **Missing Event Handler**: The server was not listening for the `player_ready` event emitted by the client.
|
||||
2. **Incomplete Payload**: The client was sending `{ roomId, deck }` but the server needed `playerId` to identify who was ready, which was missing from the payload.
|
||||
3. **Missing State Logic**: The `RoomManager` did not have a concept of "Ready" state or "Playing" status, meaning the transition from Deck Building to Game was not fully implemented.
|
||||
|
||||
## Fixes
|
||||
1. **Client (`DeckBuilderView.tsx`)**: Updated `player_ready` emission to include `playerId`.
|
||||
2. **Server (`RoomManager.ts`)**:
|
||||
- Added `ready` and `deck` properties to `Player` interface.
|
||||
- Added `playing` to `Room` status.
|
||||
- Implemented `setPlayerReady` method.
|
||||
3. **Server (`index.ts`)**:
|
||||
- Implemented `player_ready` socket handler.
|
||||
- Added logic to check if *all* active players are ready.
|
||||
- If all ready, automatically transitions room status to `playing` and initializes the game using `GameManager`, loading the submitted decks.
|
||||
- ensured deck loading uses cached images (`card.image`) if available.
|
||||
|
||||
## Verification
|
||||
1. Draft cards.
|
||||
2. Build deck.
|
||||
3. Click "Submit Deck".
|
||||
4. Server logs should show "All players ready...".
|
||||
5. Client should automatically switch to `GameView` (Battlefield).
|
||||
Reference in New Issue
Block a user