126 lines
2.4 KiB
TypeScript
126 lines
2.4 KiB
TypeScript
import {
|
|
ArraySchema,
|
|
filter,
|
|
MapSchema,
|
|
Schema,
|
|
SetSchema,
|
|
type
|
|
} from "@colyseus/schema";
|
|
import {Pet} from "./Pet";
|
|
import {Card} from "./Card";
|
|
import {GameEnv} from "../../cfg/GameEnv";
|
|
import {PlayerStateConst} from "../../constants/PlayerStateConst";
|
|
import {StateTypeEnum} from "../enums/StateTypeEnum";
|
|
|
|
|
|
export class Player extends Schema {
|
|
@type("string")
|
|
id: string;
|
|
|
|
accountId: string;
|
|
/**
|
|
* 用于组队匹配时候队伍的标记
|
|
* @type {string}
|
|
*/
|
|
group?: string;
|
|
|
|
@type("number")
|
|
heroId: number;
|
|
/**
|
|
* 手牌
|
|
*/
|
|
@filter(function (this: Player, client, value, root) {
|
|
return (client.sessionId == this.id);
|
|
})
|
|
@type({map: Card})
|
|
cards = new MapSchema<Card>();
|
|
|
|
@type({set: "string"})
|
|
cardSet = new SetSchema<string>();
|
|
|
|
/**
|
|
* 玩家出的牌
|
|
*/
|
|
@type([Card])
|
|
cardQueue = new ArraySchema<Card>();
|
|
/**
|
|
* 当前hp
|
|
*/
|
|
@type("number")
|
|
hp: number;
|
|
|
|
/**
|
|
* 状态
|
|
* 0: 正常状态
|
|
* 1: 已准备好
|
|
* 2: 死亡
|
|
* 3: 已换完牌
|
|
* 4: 玩家已选择英雄
|
|
* 9: 掉线
|
|
*/
|
|
@type("number")
|
|
state: number;
|
|
/**
|
|
* 随从
|
|
*/
|
|
@type({map: Pet})
|
|
pets = new MapSchema<Pet>();
|
|
|
|
/**
|
|
* 队伍
|
|
*/
|
|
@type("number")
|
|
team: number;
|
|
|
|
@type("number")
|
|
idx: number;
|
|
/**
|
|
* 玩家灵活时限, 客户端每次显示倒计时的时候, 需读取该时间
|
|
*/
|
|
@type("number")
|
|
extraTime: number;
|
|
/**
|
|
* 当前游戏总抽卡数量
|
|
*/
|
|
countTotal: number;
|
|
/**
|
|
* 当前累计抽卡
|
|
*/
|
|
countPresent: number;
|
|
/**
|
|
* 记录当前局内统计数字
|
|
*/
|
|
statData: Map<StateTypeEnum, number> = new Map();
|
|
/**
|
|
* 用于记录pet值, 用于统计伤害
|
|
*/
|
|
petData: Map<number, number> = new Map();
|
|
|
|
/**
|
|
* 英雄绑定的卡组, 选好英雄后, 从默认配置或玩家卡组(待实现)中获取
|
|
* key = 效果卡id
|
|
* val = weight
|
|
*/
|
|
@type({map: "number"})
|
|
unitCfgs = new MapSchema<number>();
|
|
|
|
constructor(id: string, idx: number, team: number) {
|
|
super();
|
|
this.id = id;
|
|
this.state = PlayerStateConst.PLAYER_NORMAL;
|
|
this.hp = 0;
|
|
this.idx = idx;
|
|
this.heroId = 0;
|
|
this.team = team;
|
|
this.countTotal = 0;
|
|
this.countPresent = 0;
|
|
for (let i = 0; i < new GameEnv().maxPlayerPetCount + 1; i++) {
|
|
let pet = new Pet(i);
|
|
pet.state = 0;
|
|
pet.isHero = i === 0;
|
|
this.pets.set(i + '', pet);
|
|
|
|
}
|
|
}
|
|
}
|