diff --git a/apps/client/src/app.tsx b/apps/client/src/app.tsx index a7954dd..cbc7aad 100644 --- a/apps/client/src/app.tsx +++ b/apps/client/src/app.tsx @@ -6,18 +6,18 @@ import { LobbyScene } from "./scenes/lobby/LobbyScene"; import { GameScene } from "./scenes/game/GameScene"; -import { AppState } from "@repo/shared"; +import { ScenePhase } from "@repo/shared"; export default function App() { - const { appState, room, myId } = useAppFlow(); + const { scenePhase, room, myId } = useAppFlow(); // タイトル画面分岐 - if (appState === AppState.TITLE) { + if (scenePhase === ScenePhase.TITLE) { return socketClient.joinRoom(payload)} />; } // ロビー画面分岐 - if (appState === AppState.LOBBY) { + if (scenePhase === ScenePhase.LOBBY) { return socketClient.startGame()} />; } diff --git a/apps/client/src/hooks/useAppFlow.ts b/apps/client/src/hooks/useAppFlow.ts index f96189e..b0ee7b3 100644 --- a/apps/client/src/hooks/useAppFlow.ts +++ b/apps/client/src/hooks/useAppFlow.ts @@ -1,16 +1,16 @@ import { useEffect, useState } from "react"; import { socketClient } from "../network/SocketClient"; -import { AppState } from "@repo/shared"; -import type { AppState as AppStateType, Room } from "@repo/shared"; +import { ScenePhase } from "@repo/shared"; +import type { ScenePhase as ScenePhaseType, Room } from "@repo/shared"; type AppFlowState = { - appState: AppStateType; + scenePhase: ScenePhaseType; room: Room | null; myId: string | null; }; export const useAppFlow = (): AppFlowState => { - const [appState, setAppState] = useState(AppState.TITLE); + const [scenePhase, setScenePhase] = useState(ScenePhase.TITLE); const [room, setRoom] = useState(null); const [myId, setMyId] = useState(null); @@ -18,10 +18,10 @@ socketClient.onConnect((id) => setMyId(id)); socketClient.onRoomUpdate((updatedRoom) => { setRoom(updatedRoom); - setAppState(AppState.LOBBY); + setScenePhase(ScenePhase.LOBBY); }); - socketClient.onGameStart(() => setAppState(AppState.PLAYING)); + socketClient.onGameStart(() => setScenePhase(ScenePhase.PLAYING)); }, []); - return { appState, room, myId }; + return { scenePhase, room, myId }; }; diff --git a/apps/server/src/domains/game/GameHandler.ts b/apps/server/src/domains/game/GameHandler.ts index 98a7f8f..c1d5980 100644 --- a/apps/server/src/domains/game/GameHandler.ts +++ b/apps/server/src/domains/game/GameHandler.ts @@ -1,7 +1,7 @@ import { Server, Socket } from "socket.io"; import { GameManager } from "./GameManager"; import { RoomManager } from "../room/RoomManager"; -import { protocol, RoomStatus } from "@repo/shared"; +import { protocol, RoomPhase } from "@repo/shared"; import type { playerTypes } from "@repo/shared"; export const registerGameHandlers = (io: Server, socket: Socket, gameManager: GameManager, roomManager: RoomManager) => { @@ -19,7 +19,7 @@ return; } - if (room.status === RoomStatus.PLAYING) { + if (room.status === RoomPhase.PLAYING) { console.log("[GameHandler] START_GAME ignored (already playing)", { roomId: room.roomId }); return; } @@ -31,7 +31,7 @@ }); if (room) { - room.status = RoomStatus.PLAYING; + room.status = RoomPhase.PLAYING; const playerIds = room.players.map((p: { id: string }) => p.id); @@ -60,7 +60,7 @@ // 3分経過時に GameLoop から呼ばれる処理 console.log(`[GameHandler] ルーム ${room.roomId} のゲームが終了しました (3分経過)`); io.to(room.roomId).emit(protocol.SocketEvents.GAME_END); // クライアントへ終了通知 - room.status = RoomStatus.WAITING; // ルーム状態を待機に戻す + room.status = RoomPhase.WAITING; // ルーム状態を待機に戻す } ); diff --git a/apps/server/src/domains/room/RoomManager.ts b/apps/server/src/domains/room/RoomManager.ts index efe0b7b..cfe8358 100644 --- a/apps/server/src/domains/room/RoomManager.ts +++ b/apps/server/src/domains/room/RoomManager.ts @@ -1,4 +1,4 @@ -import { RoomStatus, config } from "@repo/shared"; +import { RoomPhase, config } from "@repo/shared"; import type { Room, RoomMember } from "@repo/shared"; export class RoomManager { @@ -12,7 +12,7 @@ roomId: roomId, ownerId: socketId, players: [], - status: RoomStatus.WAITING, + status: RoomPhase.WAITING, maxPlayers: config.GAME_CONFIG.MAX_PLAYERS_PER_ROOM }; this.rooms.set(roomId, room); diff --git a/packages/shared/src/domains/app/app.const.ts b/packages/shared/src/domains/app/app.const.ts new file mode 100644 index 0000000..f8beb8d --- /dev/null +++ b/packages/shared/src/domains/app/app.const.ts @@ -0,0 +1,9 @@ +import type { ScenePhase as ScenePhaseType } from "./app.type"; + +// クライアント画面遷移利用フェーズの値 +export const ScenePhase = { + TITLE: "title", + LOBBY: "lobby", + PLAYING: "playing", + RESULT: "result", +} as const satisfies Record; diff --git a/packages/shared/src/domains/app/app.type.ts b/packages/shared/src/domains/app/app.type.ts new file mode 100644 index 0000000..83777d0 --- /dev/null +++ b/packages/shared/src/domains/app/app.type.ts @@ -0,0 +1,2 @@ +// クライアント画面遷移利用フェーズ型 +export type ScenePhase = "title" | "lobby" | "playing" | "result"; diff --git a/packages/shared/src/domains/room/room.const.ts b/packages/shared/src/domains/room/room.const.ts index 235dcd1..bf0f189 100644 --- a/packages/shared/src/domains/room/room.const.ts +++ b/packages/shared/src/domains/room/room.const.ts @@ -1,15 +1,8 @@ -import type { AppState as AppStateType, RoomStatus as RoomStatusType } from "./room.type"; - -// クライアント画面遷移利用アプリ状態の値 -export const AppState = { - TITLE: "title", - LOBBY: "lobby", - PLAYING: "playing", -} as const satisfies Record; +import type { RoomPhase as RoomPhaseType } from "./room.type"; // ルーム進行フェーズ状態の値 -export const RoomStatus = { +export const RoomPhase = { WAITING: "waiting", PLAYING: "playing", RESULT: "result", -} as const satisfies Record; +} as const satisfies Record; diff --git a/packages/shared/src/domains/room/room.type.ts b/packages/shared/src/domains/room/room.type.ts index 12ed833..4c1ac67 100644 --- a/packages/shared/src/domains/room/room.type.ts +++ b/packages/shared/src/domains/room/room.type.ts @@ -1,8 +1,5 @@ -// クライアント画面遷移利用アプリ状態型 -export type AppState = "title" | "lobby" | "playing"; - // ルーム進行フェーズ状態型 -export type RoomStatus = "waiting" | "playing" | "result"; +export type RoomPhase = "waiting" | "playing" | "result"; // ルーム所属プレイヤー情報型 export interface RoomMember { @@ -17,7 +14,7 @@ roomId: string; ownerId: string; players: RoomMember[]; - status: RoomStatus; + status: RoomPhase; maxPlayers: number; } diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 409abe2..0464d77 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -2,14 +2,16 @@ export * as gridMapTypes from "./domains/gridMap/gridMap.type"; export * as gridMapLogic from "./domains/gridMap/gridMap.logic"; export * as playerTypes from "./domains/player/player.type"; +export * as appTypes from "./domains/app/app.type"; export * as roomTypes from "./domains/room/room.type"; -export { AppState, RoomStatus } from "./domains/room/room.const"; +export { ScenePhase } from "./domains/app/app.const"; +export { RoomPhase } from "./domains/room/room.const"; export type { - AppState as AppStateType, - RoomStatus as RoomStatusType, + RoomPhase as RoomPhaseType, Room, RoomMember, JoinRoomPayload, } from "./domains/room/room.type"; +export type { ScenePhase as ScenePhaseType } from "./domains/app/app.type"; export * as protocol from "./protocol/events"; export * as config from "./config"; \ No newline at end of file