Archived
95 lines
2.2 KiB
TypeScript
95 lines
2.2 KiB
TypeScript
import { WebSocket } from "ws"
|
|
import { IFireGemsStack, IMarket, IMarketStack, IPlayerBoard, IPlayerDiscard, IPlayerHand } from "./containers.js"
|
|
|
|
export const ClientQueryType = {
|
|
ACTION: "action",
|
|
SUBSCRIBE: "subscribe",
|
|
UNSUBSCRIBE: "unsubscribe",
|
|
LOGIN: "login"
|
|
} as const
|
|
|
|
export const ServerQueryType = {
|
|
CREATE: "create",
|
|
ERROR: "error",
|
|
ADD: "add",
|
|
REMOVE: "remove",
|
|
} as const
|
|
|
|
export type ClientMessageType = typeof ClientQueryType[keyof typeof ClientQueryType]
|
|
export type ServerMessageType = typeof ServerQueryType[keyof typeof ServerQueryType]
|
|
|
|
export interface ClientMessage {
|
|
uuid: string
|
|
type: ClientMessageType
|
|
target: string
|
|
method: string
|
|
args: { [key: string]: string }
|
|
}
|
|
|
|
export interface ServerMessage {
|
|
type: ServerMessageType
|
|
answer_to?: ClientMessage["uuid"]
|
|
args: { [key: string]: any }
|
|
}
|
|
|
|
|
|
export interface IGameObject {
|
|
uuid: string
|
|
}
|
|
|
|
export interface IEffect extends IGameObject {
|
|
request_use: () => void
|
|
}
|
|
|
|
export interface ICard extends IGameObject {
|
|
|
|
}
|
|
|
|
export interface ITurn extends IGameObject {
|
|
readonly effectsAvailables: Array<IEffect>
|
|
readonly cardsLocked: Set<ICard>
|
|
discardMarkers: number
|
|
fuckUMarkers: number
|
|
damageReserve: number
|
|
goldReserve: number
|
|
currentDiscardEffect: IEffect
|
|
request_lockCard: (card: ICard) => void
|
|
}
|
|
|
|
export interface IPlayer extends IGameObject {
|
|
readonly board: IPlayerBoard
|
|
readonly hand: IPlayerHand
|
|
readonly discard: IPlayerDiscard
|
|
ready: boolean
|
|
username: string
|
|
user: IUser
|
|
request_setReady: (value: boolean) => void
|
|
}
|
|
|
|
export interface ITeam extends IGameObject {
|
|
readonly players: Set<IPlayer>
|
|
color: string
|
|
health: number
|
|
|
|
request_damage: (amount: number) => void
|
|
request_join: (player: IPlayer) => void
|
|
}
|
|
|
|
export interface IGame extends IGameObject {
|
|
readonly marketStack: IMarketStack
|
|
readonly market: IMarket
|
|
readonly fireGems: IFireGemsStack
|
|
readonly owner: IPlayer
|
|
currentTurn?: ITeam
|
|
started: boolean
|
|
changeRules: () => void
|
|
end: () => void
|
|
}
|
|
|
|
export interface IUser extends IGameObject {
|
|
|
|
}
|
|
|
|
export interface ILobby extends IGameObject {
|
|
|
|
} |