diff --git a/src/samples/tic-tac-toe.ts b/src/samples/tic-tac-toe.ts index ba13d68..844ac97 100644 --- a/src/samples/tic-tac-toe.ts +++ b/src/samples/tic-tac-toe.ts @@ -1,7 +1,7 @@ import { Part } from "@/core/part"; import { createRegion, Region } from "@/core/region"; import { createPromptDef, IGameContext } from "@/core/game"; -import { BaseGameClient, GameClient } from "@/core/game-client"; +import { BaseGameClient } from "@/core/game-client"; import { createMiddlewareChain } from "@/utils/middleware"; const BOARD_SIZE = 3; @@ -186,14 +186,7 @@ export async function placePiece( }); } -type EntityMap = { parts: TicTacToePart; board: Region }; -type TriggerMap = { - turn: { player: PlayerType; turn: number }; -}; -export class Client - extends BaseGameClient - implements GameClient -{ +export class Client extends BaseGameClient { private onTurn = createMiddlewareChain( async (ctx: { player: PlayerType; turn: number }) => { return await turn(this._context, ctx.player, ctx.turn); @@ -225,22 +218,13 @@ export class Client return game.value; } - select( - type: K, - id: string, - callback: (t: EntityMap[K]) => void, - ): () => void { - if (type === "parts") - return this.assignSelector((state) => state.parts[id], callback); - return function () {}; + selectPart(id: string, callback: (t: TicTacToePart) => void): () => void { + return this.assignSelector((state) => state.parts[id], callback); } - use( - trigger: K, - callback: (ctx: TriggerMap[K], next: () => Promise) => Promise, - ): () => void { - if (trigger === "turn") { - return this.onTurn.use(callback); - } - return function () {}; + selectTurn(callback: (turns: number) => void): () => void { + return this.assignSelector((s) => s.turn, callback); + } + selectCurrentPlayer(callback: (player: PlayerType) => void) { + return this.assignSelector((s) => s.currentPlayer, callback); } }