Archived
68 lines
1.6 KiB
TypeScript
68 lines
1.6 KiB
TypeScript
export interface ClientMessage {
|
|
uuid: string;
|
|
target: string;
|
|
method: string;
|
|
args: { [key: string]: string };
|
|
}
|
|
|
|
export interface LobbyEvents {
|
|
newGame: (author: IUser, game: IGame) => void;
|
|
updateGame: (game: IGame) => void;
|
|
removeGame: (game: string) => void;
|
|
}
|
|
|
|
type TeamEvents = {
|
|
team_addPlayer: { gameObject: string; data: string };
|
|
team_removePlayer: { gameObject: string; data: string };
|
|
};
|
|
|
|
type TE = {
|
|
[T in keyof TeamEvents]: { event: T } & TeamEvents[T];
|
|
};
|
|
|
|
type ChildEvents = TE;
|
|
|
|
export interface GameEvents {
|
|
start: () => void;
|
|
createTeam: (author: IUser, team: ITeam) => void;
|
|
removeTeam: (team: ITeam) => void;
|
|
createPlayer: (author: IUser, player: IPlayer) => void;
|
|
removePlayer: (player: IPlayer, reason?: string) => void;
|
|
childEvent: (event: ChildEvents[keyof ChildEvents]) => void;
|
|
}
|
|
export interface ICard extends IGameObject {}
|
|
|
|
export interface IContainer extends IGameObject {
|
|
cards: Array<ICard | null>;
|
|
}
|
|
|
|
export interface IGameObject {
|
|
readonly uuid: string;
|
|
}
|
|
|
|
export interface IUser extends IGameObject {
|
|
readonly username: string;
|
|
readonly image: string;
|
|
}
|
|
|
|
export interface IPlayer extends IGameObject {
|
|
hand: IContainer;
|
|
discard: IContainer;
|
|
stack: IContainer;
|
|
board: IContainer;
|
|
user: IUser;
|
|
}
|
|
|
|
export interface ITeam extends IGameObject {
|
|
players: IUser[];
|
|
}
|
|
export interface IGame extends IGameObject {
|
|
readonly teams: ITeam[];
|
|
readonly market: IContainer;
|
|
readonly marketStack: IContainer;
|
|
readonly fireGems: IContainer;
|
|
readonly started: boolean;
|
|
readonly owner: string;
|
|
readonly rules: {};
|
|
}
|