Haruka041
feat: migrate gameplay networking to server-authoritative ws
3c491ea
import { ChanceCardType, PlayerEvents } from "../enums/game";
import { Buff, ChanceCardInfo, ChanceCardInstanceInfo, PlayerInfo, PropertyInfo, User } from "./types";
import { GameProcess } from "./GameProcess";
export interface PlayerEventsCallback {
[PlayerEvents.GetPropertiesList]: () => PropertyInterface[];
[PlayerEvents.GetCardsList]: () => ChanceCardInterface[];
[PlayerEvents.GetMoney]: () => number;
[PlayerEvents.GetStop]: () => number;
[PlayerEvents.GetIsBankrupted]: () => boolean;
[PlayerEvents.AnimationFinished]: (value: void | PromiseLike<void>) => void;
[PlayerEvents.Walk]: (walkValue: number) => Promise<number>;
[PlayerEvents.Tp]: (tpValue: number) => Promise<number>;
[PlayerEvents.BeforeSetPropertiesList]: (newPropertiesList: PropertyInterface[]) => PropertyInterface[] | undefined;
[PlayerEvents.AfterSetPropertiesList]: (newPropertiesList: PropertyInterface[]) => undefined;
[PlayerEvents.BeforeRound]:
| ((player: PlayerInterface) => Promise<PlayerInterface | undefined | void>)
| ((player: PlayerInterface) => PlayerInterface | undefined | void);
[PlayerEvents.AfterRound]: (player: PlayerInterface) => Promise<PlayerInterface | undefined | void> | void;
[PlayerEvents.BeforeGainProperty]:
| ((newProperty: PropertyInterface) => Promise<PropertyInterface | undefined | void>)
| ((newProperty: PropertyInterface) => PropertyInterface | undefined | void);
[PlayerEvents.AfterGainProperty]: (newProperty: PropertyInterface) => Promise<PropertyInterface | undefined | void> | void;
[PlayerEvents.BeforeLoseProperty]:
| ((lostProperty: PropertyInterface) => Promise<PropertyInterface | undefined | void>)
| ((lostProperty: PropertyInterface) => PropertyInterface | undefined | void);
[PlayerEvents.AfterLoseProperty]: (lostProperty: PropertyInterface) => Promise<PropertyInterface | undefined | void> | void;
[PlayerEvents.BeforeSetCardsList]:
| ((newCardList: ChanceCardInterface[]) => Promise<ChanceCardInterface[] | undefined | void>)
| ((newCardList: ChanceCardInterface[]) => ChanceCardInterface[] | undefined | void);
[PlayerEvents.AfterSetCardsList]: (newCardList: ChanceCardInterface[]) => Promise<ChanceCardInterface[] | undefined | void> | void;
[PlayerEvents.BeforeGainCard]:
| ((gainCard: ChanceCardInterface) => Promise<ChanceCardInterface | undefined | void>)
| ((gainCard: ChanceCardInterface) => ChanceCardInterface | undefined | void);
[PlayerEvents.AfterGainCard]: (gainCard: ChanceCardInterface) => Promise<ChanceCardInterface | undefined | void> | void;
[PlayerEvents.BeforeLoseCard]:
| ((lostCard: ChanceCardInterface) => Promise<ChanceCardInterface | undefined | void>)
| ((lostCard: ChanceCardInterface) => ChanceCardInterface | undefined | void);
[PlayerEvents.AfterLoseCard]: (lostCard: ChanceCardInterface) => Promise<ChanceCardInterface | undefined | void> | void;
[PlayerEvents.BeforeSetMoney]:
| ((moneyValue: number) => Promise<number | undefined | void>)
| ((moneyValue: number) => number | undefined | void);
[PlayerEvents.AfterSetMoney]: (moneyValue: number) => Promise<number | undefined | void> | void;
[PlayerEvents.BeforeGain]:
| ((gainMoney: number, source?: PlayerInterface) => Promise<number | undefined | void>)
| ((gainMoney: number, source?: PlayerInterface) => number | undefined | void);
[PlayerEvents.AfterGain]: (gainMoney: number, source?: PlayerInterface) => Promise<number | undefined | void> | void;
[PlayerEvents.BeforeCost]:
| ((costMoney: number, target?: PlayerInterface) => Promise<number | undefined | void>)
| ((costMoney: number, target?: PlayerInterface) => number | undefined | void);
[PlayerEvents.AfterCost]: (costMoney: number, target?: PlayerInterface) => Promise<number | undefined | void> | void;
[PlayerEvents.BeforeStop]:
| ((stopValue: number) => Promise<number | undefined | void>)
| ((stopValue: number) => number | undefined | void);
[PlayerEvents.AfterStop]: (stopValue: number) => Promise<number | undefined | void> | void;
[PlayerEvents.BeforeTp]:
| ((tpValue: number) => Promise<number | undefined | void>)
| ((tpValue: number) => number | undefined | void);
[PlayerEvents.AfterTp]: (tpValue: number) => Promise<number | undefined | void> | void;
[PlayerEvents.BeforeWalk]:
| ((walkValue: number) => Promise<number | undefined | void>)
| ((walkValue: number) => number | undefined | void);
[PlayerEvents.AfterWalk]: (walkValue: number) => Promise<number | undefined | void> | void;
[PlayerEvents.BeforeSetBankrupted]: (isBankrupted: boolean) => Promise<boolean> | boolean;
[PlayerEvents.AfterSetBankrupted]: (isBankrupted: boolean) => Promise<boolean | undefined | void> | void;
}
export interface PropertyInterface {
getId: () => string;
getName: () => string;
getBuildingLevel: () => number;
getBuildCost: () => number;
getSellCost: () => number;
getCost_lv0: () => number;
getCost_lv1: () => number;
getCost_lv2: () => number;
getOwner: () => PlayerInterface | undefined;
getPassCost: () => number;
setOwner: (player: PlayerInterface | undefined) => Promise<void>;
setBuildingLevel: (level: 0 | 1 | 2) => void;
getPropertyInfo: () => PropertyInfo;
}
export interface PlayerInterface {
extras: Record<string, any>;
getUser: () => User;
getId: () => string;
getName: () => string;
getPropertiesList: () => PropertyInterface[];
setPropertiesList: (newPropertiesList: PropertyInterface[]) => void;
gainProperty: (property: PropertyInterface) => Promise<void>;
loseProperty: (property: PropertyInterface) => Promise<void>;
getCardsList: () => ChanceCardInterface[];
setCardsList: (newChanceCardList: ChanceCardInterface[]) => void;
getCardById: (cardId: string) => ChanceCardInterface | undefined;
gainCard: (gainCard: ChanceCardInterface) => void;
loseCard: (cardId: string) => void;
setMoney: (money: number) => void;
getMoney: () => number;
cost: (money: number, target?: PlayerInterface) => Promise<boolean>;
gain: (money: number, source?: PlayerInterface) => Promise<number>;
setStop: (stop: number) => void;
getStop: () => number;
setPositionIndex: (newIndex: number) => void;
getPositionIndex: () => number;
walk: (step: number) => Promise<void>;
tp: (positionIndex: number) => Promise<void>;
addEventListener: <K extends PlayerEvents>(
eventName: K,
fn: PlayerEventsCallback[K],
triggerTimes?: number,
buff?: Buff
) => void;
removeListener(eventName: PlayerEvents, id: string): void;
removeAllListeners(eventName: PlayerEvents): void;
updateBuff(buffId: string, newBuff: Buff): void;
getPlayerInfo: () => PlayerInfo;
}
export interface ChanceCardInterface {
getId: () => string;
getSourceId: () => string;
getName: () => string;
getDescribe: () => string;
getIcon: () => string;
getType: () => ChanceCardType;
getColor: () => string;
getEffectCode: () => string;
use: (
sourcePlayer: PlayerInterface,
target: PlayerInterface | PropertyInterface | PlayerInterface[] | PropertyInterface[] | null,
gameProcess: GameProcess
) => Promise<void>;
getChanceCardInfo: () => ChanceCardInfo | ChanceCardInstanceInfo;
}