From 2d7c1fab992241efe13b5772d289ba23180da43d Mon Sep 17 00:00:00 2001 From: Yuto Nishida Date: Sun, 7 Dec 2025 22:48:50 -0800 Subject: [PATCH] [2nub] Add role confirmation state --- experimental/2nub/src/server/gameState.ts | 14 +++++++++----- experimental/2nub/src/types.ts | 15 ++++++++++++--- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/experimental/2nub/src/server/gameState.ts b/experimental/2nub/src/server/gameState.ts index 3126164..9b13b52 100644 --- a/experimental/2nub/src/server/gameState.ts +++ b/experimental/2nub/src/server/gameState.ts @@ -272,7 +272,7 @@ class GameStateManager { // Set all players to Tanner const playerIdsByWakeupOrder = shuffle(game.players.map(p => [p.id])); game.state = { - state: 'night', + state: 'roleAssignment', playerIdsByWakeupOrder, playerData: Object.fromEntries( game.players.map(player => [player.id, { @@ -283,8 +283,10 @@ class GameStateManager { ), centerCards: ['tanner', 'tanner', 'tanner'], ruleset: { ...game.state.ruleset }, - turn: 0, - } + playerConfirmations: Object.fromEntries( + game.players.map(player => [player.id, false]) + ), + }; return game; } } @@ -314,12 +316,14 @@ class GameStateManager { ); game.state = { - state: 'night', + state: 'roleAssignment', playerIdsByWakeupOrder, playerData, centerCards, ruleset: { ...game.state.ruleset }, - turn: 0, + playerConfirmations: Object.fromEntries( + game.players.map(player => [player.id, false]) + ), } return game; diff --git a/experimental/2nub/src/types.ts b/experimental/2nub/src/types.ts index 4342d5c..7570284 100644 --- a/experimental/2nub/src/types.ts +++ b/experimental/2nub/src/types.ts @@ -44,13 +44,22 @@ export interface StateLobby { } }; -export interface StateNight { - state: 'night'; +export interface StateRoleAssignment { + state: 'roleAssignment'; // Array of player IDs in order of wake-up, grouped by simultaneous wake-ups playerIdsByWakeupOrder: Player["id"][][]; playerData: Record; centerCards: RoleId[]; ruleset: StateLobby["ruleset"]; + playerConfirmations: Record; +} + +export interface StateNight { + state: 'night'; + playerIdsByWakeupOrder: StateRoleAssignment["playerIdsByWakeupOrder"]; + playerData: StateRoleAssignment["playerData"]; + centerCards: StateRoleAssignment["centerCards"]; + ruleset: StateRoleAssignment["ruleset"]; turn: number; } @@ -87,7 +96,7 @@ export type GameStateClient = { gameLog: string[]; players: Player[]; - state: StateLobby | StateNight | StateDay | StateVoting | StateFinished; + state: StateLobby | StateRoleAssignment | StateNight | StateDay | StateVoting | StateFinished; } // Server-side game state with ID for storage/routing -- 2.54.0