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; [PlayerEvents.Walk]: (walkValue: number) => Promise; [PlayerEvents.Tp]: (tpValue: number) => Promise; [PlayerEvents.BeforeSetPropertiesList]: (newPropertiesList: PropertyInterface[]) => PropertyInterface[] | undefined; [PlayerEvents.AfterSetPropertiesList]: (newPropertiesList: PropertyInterface[]) => undefined; [PlayerEvents.BeforeRound]: | ((player: PlayerInterface) => Promise) | ((player: PlayerInterface) => PlayerInterface | undefined | void); [PlayerEvents.AfterRound]: (player: PlayerInterface) => Promise | void; [PlayerEvents.BeforeGainProperty]: | ((newProperty: PropertyInterface) => Promise) | ((newProperty: PropertyInterface) => PropertyInterface | undefined | void); [PlayerEvents.AfterGainProperty]: (newProperty: PropertyInterface) => Promise | void; [PlayerEvents.BeforeLoseProperty]: | ((lostProperty: PropertyInterface) => Promise) | ((lostProperty: PropertyInterface) => PropertyInterface | undefined | void); [PlayerEvents.AfterLoseProperty]: (lostProperty: PropertyInterface) => Promise | void; [PlayerEvents.BeforeSetCardsList]: | ((newCardList: ChanceCardInterface[]) => Promise) | ((newCardList: ChanceCardInterface[]) => ChanceCardInterface[] | undefined | void); [PlayerEvents.AfterSetCardsList]: (newCardList: ChanceCardInterface[]) => Promise | void; [PlayerEvents.BeforeGainCard]: | ((gainCard: ChanceCardInterface) => Promise) | ((gainCard: ChanceCardInterface) => ChanceCardInterface | undefined | void); [PlayerEvents.AfterGainCard]: (gainCard: ChanceCardInterface) => Promise | void; [PlayerEvents.BeforeLoseCard]: | ((lostCard: ChanceCardInterface) => Promise) | ((lostCard: ChanceCardInterface) => ChanceCardInterface | undefined | void); [PlayerEvents.AfterLoseCard]: (lostCard: ChanceCardInterface) => Promise | void; [PlayerEvents.BeforeSetMoney]: | ((moneyValue: number) => Promise) | ((moneyValue: number) => number | undefined | void); [PlayerEvents.AfterSetMoney]: (moneyValue: number) => Promise | void; [PlayerEvents.BeforeGain]: | ((gainMoney: number, source?: PlayerInterface) => Promise) | ((gainMoney: number, source?: PlayerInterface) => number | undefined | void); [PlayerEvents.AfterGain]: (gainMoney: number, source?: PlayerInterface) => Promise | void; [PlayerEvents.BeforeCost]: | ((costMoney: number, target?: PlayerInterface) => Promise) | ((costMoney: number, target?: PlayerInterface) => number | undefined | void); [PlayerEvents.AfterCost]: (costMoney: number, target?: PlayerInterface) => Promise | void; [PlayerEvents.BeforeStop]: | ((stopValue: number) => Promise) | ((stopValue: number) => number | undefined | void); [PlayerEvents.AfterStop]: (stopValue: number) => Promise | void; [PlayerEvents.BeforeTp]: | ((tpValue: number) => Promise) | ((tpValue: number) => number | undefined | void); [PlayerEvents.AfterTp]: (tpValue: number) => Promise | void; [PlayerEvents.BeforeWalk]: | ((walkValue: number) => Promise) | ((walkValue: number) => number | undefined | void); [PlayerEvents.AfterWalk]: (walkValue: number) => Promise | void; [PlayerEvents.BeforeSetBankrupted]: (isBankrupted: boolean) => Promise | boolean; [PlayerEvents.AfterSetBankrupted]: (isBankrupted: boolean) => Promise | 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; setBuildingLevel: (level: 0 | 1 | 2) => void; getPropertyInfo: () => PropertyInfo; } export interface PlayerInterface { extras: Record; getUser: () => User; getId: () => string; getName: () => string; getPropertiesList: () => PropertyInterface[]; setPropertiesList: (newPropertiesList: PropertyInterface[]) => void; gainProperty: (property: PropertyInterface) => Promise; loseProperty: (property: PropertyInterface) => Promise; 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; gain: (money: number, source?: PlayerInterface) => Promise; setStop: (stop: number) => void; getStop: () => number; setPositionIndex: (newIndex: number) => void; getPositionIndex: () => number; walk: (step: number) => Promise; tp: (positionIndex: number) => Promise; addEventListener: ( 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; getChanceCardInfo: () => ChanceCardInfo | ChanceCardInstanceInfo; }