initial commit

This commit is contained in:
2024-05-26 15:21:54 +02:00
commit 0cd59cdb23
6 changed files with 368 additions and 0 deletions
+47
View File
@@ -0,0 +1,47 @@
import { ContainerVisibility, IContainer, IFireGemsStack, IInteractibleContainer, IMarket, IMarketStack, IPlayableContainer, IPlayerBoard, IPlayerDiscard, IPlayerHand, IPlayerStack } from "../generic/containers.js"
import { IGameObject, ICard, IPlayer, IGame } from "../generic/index.js"
export interface ICContainer<T> extends IContainer<T> {
onCardsAppend: (cards: Array<ICard>) => void
onDraw: (cards: Array<ICard>) => void
onRemoveCards: (cards: Array<ICard>) => void
onShuffle: () => void
}
export interface ICInteractibleContainer extends IInteractibleContainer {
onSacrifice: (card: ICard) => void
}
export interface ICPlayableContainer extends IPlayableContainer {
onDiscard: (card: ICard) => void
}
export interface ICMarketStack extends IMarketStack {
}
export interface ICMarket extends IMarket {
onBuy: (card: ICard) => void
onBuyInHand: (card: ICard) => void
onBuyInStack: (card: ICard) => void
}
export interface ICFireGemsStack extends IFireGemsStack {
}
export interface ICPlayerStack extends IPlayerStack {
}
export interface ICPlayerDiscard extends IPlayerDiscard {
onPutOnStack: (card: ICard) => void
}
export interface ICPlayerHand extends IPlayerHand {
onPutAllOnBoard: () => void
}
export interface ICPlayerBoard extends IPlayerBoard {
onStunChampion: (card: ICard) => void
}
+58
View File
@@ -0,0 +1,58 @@
import { IFireGemsStack, IMarket, IMarketStack, IPlayerBoard, IPlayerDiscard, IPlayerHand } from "../generic/containers.js"
import { ICard, IEffect, IGame, IGameObject, ILobby, IPlayer, ITeam, ITurn, IUser } from "../generic/index.js"
import { ISLobby } from "../server/index.js"
export interface ICEffect extends IEffect {
}
export interface ICCard extends ICard {
}
export interface ICTurn extends ITurn {
onCardLock: (card: ICard) => void
}
export interface ICPlayer extends IPlayer {
onReadyStateChange: (ready: boolean) => void
}
export interface ICTeam extends ITeam {
damage: (amount: number) => void
join: () => void
onTakeDamage: (amount: number) => void
onPlayerAdd: (player: IPlayer) => void
onPlayerRemove: (player: IPlayer) => void
onStartTurn: () => void
onEndTurn: () => void
onDie: () => void
}
export interface ICGame extends IGame {
join: () => void
kick: (player: IPlayer) => void
leave: () => void
start: () => void
request_join: () => void
request_kick: (player: ICPlayer) => void
request_leave: () => void
request_start: () => void
request_changeRules: () => void
request_gameEnd: () => void
onRulesChange: () => void
onAddTeam: (team: ITeam) => void
onRemoveTeam: (team: ITeam) => void
onGameStart: () => void
onGameEnd: () => void
}
export interface ICUser extends IUser {
}
export interface ICLobby extends ILobby {
request_createGame: () => Promise<ReturnType<ISLobby["request_createGame"]>>
}
+55
View File
@@ -0,0 +1,55 @@
import { ICard, IGame, IGameObject, IPlayer } from "./index.js"
export enum ContainerVisibility {
NONE = "none",
ONLY_LAST = "only_last",
ALL = "all",
PROTECTED = "protected"
}
export interface IContainer<T> extends IGameObject {
owner: T
readonly visibility: ContainerVisibility
}
export interface IInteractibleContainer extends IContainer<IPlayer> {
readonly visibility: ContainerVisibility.ALL | ContainerVisibility.PROTECTED
request_sacrifice: (card: ICard) => void
}
export interface IPlayableContainer extends IInteractibleContainer {
request_discard: (card: ICard) => void
}
export interface IMarketStack extends IContainer<IGame> {
readonly visibility: ContainerVisibility.NONE
}
export interface IMarket extends IContainer<IGame> {
readonly visibility: ContainerVisibility.ALL
request_buy: (card: ICard) => void
request_buyInHand: (card: ICard) => void
request_buyInStack: (card: ICard) => void
}
export interface IFireGemsStack extends IMarket {
}
export interface IPlayerStack extends IContainer<IPlayer> {
readonly visibility: ContainerVisibility.NONE
}
export interface IPlayerDiscard extends IInteractibleContainer {
readonly visibility: ContainerVisibility.ALL
request_putOnStack: (card: ICard) => void
}
export interface IPlayerHand extends IPlayableContainer {
readonly visibility: ContainerVisibility.PROTECTED
}
export interface IPlayerBoard extends IPlayableContainer {
readonly visibility: ContainerVisibility.ALL
request_stunChampion: (card: ICard) => void
}
+95
View File
@@ -0,0 +1,95 @@
import { WebSocket } from "ws"
import { IFireGemsStack, IMarket, IMarketStack, IPlayerBoard, IPlayerDiscard, IPlayerHand } from "./containers.js"
export const ClientQueryType = {
ACTION: "action",
SUBSCRIBE: "subscribe",
UNSUBSCRIBE: "unsubscribe",
} 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 {
removeGame: () => void
}
+48
View File
@@ -0,0 +1,48 @@
import { ContainerVisibility, IContainer, IFireGemsStack, IInteractibleContainer, IMarket, IMarketStack, IPlayableContainer, IPlayerBoard, IPlayerDiscard, IPlayerHand, IPlayerStack } from "../generic/containers.js"
import { IGameObject, ICard, IPlayer, IGame } from "../generic/index.js"
import { ISCard } from "./index.js"
export interface ISContainer<T> extends IContainer<T> {
appendCards: (cards: Array<ISCard>) => void
draw: (amount: number) => Array<ISCard>
removeCards: (cards: Array<ISCard>) => void
shuffle: () => void
}
export interface ISInteractibleContainer extends IInteractibleContainer {
sacrifice: (card: ISCard) => void
}
export interface ISPlayableContainer extends IPlayableContainer {
discard: (card: ISCard) => void
}
export interface ISMarketStack extends IMarketStack {
}
export interface ISMarket extends IMarket {
buy: (card: ISCard) => void
buyInHand: (card: ISCard) => void
buyInStack: (card: ISCard) => void
}
export interface ISFireGemsStack extends IFireGemsStack {
}
export interface ISPlayerStack extends IPlayerStack {
}
export interface ISPlayerDiscard extends IPlayerDiscard {
putOnStack: (card: ISCard) => void
}
export interface ISPlayerHand extends IPlayerHand {
putAllOnBoard: () => void
}
export interface ISPlayerBoard extends IPlayerBoard {
stunChampion: (card: ISCard) => void
}
+65
View File
@@ -0,0 +1,65 @@
import { ICard, IEffect, IGame, ILobby, IPlayer, ITeam, ITurn, IUser, ServerMessage } from "../generic/index.js"
import { WebSocket } from "ws"
export interface ISClientProvider {
socket: WebSocket
send: (message: ServerMessage) => void
}
export interface ISQuery {
provider: ISClientProvider
accept: (message: ServerMessage) => void
cancel: (message: ServerMessage) => void
error: (message: string) => void
}
export interface ISEffect extends IEffect {
use: () => void
}
export interface ISCard extends ICard {
}
export interface ISTurn extends ITurn {
lockCard: (card: ICard) => void
}
export interface ISPlayer extends IPlayer {
setReady: (ready: boolean) => void
}
export interface ISTeam extends ITeam {
damage: (amount: number) => void
addPlayer: (player: IPlayer) => void
removePlayer: (player: IPlayer) => void
startTurn: () => void
endTurn: () => void
die: () => void
}
export interface ISGame extends IGame {
addTeam: (team: ISTeam) => void
removeTeam: (team: ISTeam) => void
start: () => void
request_join: (query: ISQuery) => void
request_kick: (query: ISQuery) => void
request_leave: (query: ISQuery) => void
request_start: (query: ISQuery) => void
request_changeRules: (query: ISQuery) => void
request_gameEnd: (query: ISQuery) => void
}
export interface ISUser extends IUser {
}
export interface ISLobby extends ILobby {
createGame: () => void
request_createGame: (query: ISQuery) => void
request_login: (query: ISQuery) => void
subscribe: (query: ISQuery) => any
}