This repository has been archived on 2024-07-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2024-05-29 15:04:46 +02:00

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: {};
}