77
lib/types.ts
Archivo normal
77
lib/types.ts
Archivo normal
@@ -0,0 +1,77 @@
|
||||
// Domino game types and interfaces
|
||||
|
||||
export type DominoTile = {
|
||||
id: string;
|
||||
left: number;
|
||||
right: number;
|
||||
isDouble: boolean;
|
||||
};
|
||||
|
||||
export type Position = {
|
||||
x: number;
|
||||
y: number;
|
||||
};
|
||||
|
||||
export type Orientation = 'horizontal' | 'vertical';
|
||||
|
||||
export type PlacedTile = {
|
||||
tile: DominoTile;
|
||||
position: Position;
|
||||
orientation: Orientation;
|
||||
rotation: number;
|
||||
};
|
||||
|
||||
export type Player = {
|
||||
id: string;
|
||||
name: string;
|
||||
tiles: DominoTile[];
|
||||
score: number;
|
||||
isAI: boolean;
|
||||
isReady: boolean;
|
||||
};
|
||||
|
||||
export type BoardEnd = {
|
||||
value: number;
|
||||
position: Position;
|
||||
side: 'left' | 'right' | 'top' | 'bottom';
|
||||
};
|
||||
|
||||
export type GameState = {
|
||||
id: string;
|
||||
players: Player[];
|
||||
currentPlayerIndex: number;
|
||||
board: PlacedTile[];
|
||||
boneyard: DominoTile[];
|
||||
boardEnds: BoardEnd[];
|
||||
winner: string | null;
|
||||
isGameOver: boolean;
|
||||
turnsPassed: number;
|
||||
gameMode: 'waiting' | 'playing' | 'finished';
|
||||
};
|
||||
|
||||
export type GameMove = {
|
||||
playerId: string;
|
||||
tile: DominoTile;
|
||||
side: 'left' | 'right';
|
||||
pass?: boolean;
|
||||
};
|
||||
|
||||
export type SocketEvents = {
|
||||
// Client to Server
|
||||
'create-room': () => void;
|
||||
'join-room': (roomId: string, playerName: string) => void;
|
||||
'player-ready': (roomId: string) => void;
|
||||
'make-move': (roomId: string, move: GameMove) => void;
|
||||
'draw-tile': (roomId: string) => void;
|
||||
'leave-room': (roomId: string) => void;
|
||||
|
||||
// Server to Client
|
||||
'room-created': (roomId: string) => void;
|
||||
'room-joined': (gameState: GameState, playerId: string) => void;
|
||||
'game-state-updated': (gameState: GameState) => void;
|
||||
'game-started': (gameState: GameState) => void;
|
||||
'invalid-move': (message: string) => void;
|
||||
'player-joined': (player: Player) => void;
|
||||
'player-left': (playerId: string) => void;
|
||||
'error': (message: string) => void;
|
||||
};
|
||||
Referencia en una nueva incidencia
Block a user