package chesstitians import ( "time" rule "mongo.games.com/game/gamerule/chess" "mongo.games.com/game/gamesrv/base" ) // PlayerEx 玩家身上的额外数据 type PlayerEx struct { *base.Player // 玩家信息 isBlack bool // 黑棋(默认是白棋先手) nextPlay bool // 是否再来一局 winCoin int64 // 本局赢的钱 taxCoin int64 // 本局税收 isWin int32 // 本局输赢 1赢 2输 0平 winTimes int32 // 连赢次数 otherScore int32 // 额外积分 nextRank int32 // 再赢几局晋级 winScore int32 // 本局积分变化 oldGrade int64 // 原来的积分 totalTime int64 // 下棋总时长 lastTime time.Time } func (p *PlayerEx) init() { p.winCoin = 0 p.isBlack = false p.nextPlay = false p.oldGrade = 0 p.totalTime = 0 p.lastTime = time.Time{} } func (p *PlayerEx) Clear() { p.winCoin = 0 p.isBlack = false p.nextPlay = false p.oldGrade = 0 p.totalTime = 0 p.lastTime = time.Time{} p.MarkFlag(base.PlayerState_WaitNext) } func (p *PlayerEx) CanOp() bool { if p.IsGameing() { return true } return false } // GetTotalTime 获取玩家总下棋消耗的操作时长,单位秒 func (p *PlayerEx) GetTotalTime() int32 { if s := p.GetScene(); s != nil && s.GetSceneState().GetState() == rule.SceneStatePlayerOp && p.IsGameing() { if ex, ok := s.ExtraData.(*SceneEx); ok { if ex.GetCurOpPos() == p.Pos { return p.getTotalTime() } else { return int32(p.totalTime) } } } return 0 } func (p *PlayerEx) getTotalTime() int32 { return int32(p.totalTime + int64(time.Now().Sub(p.lastTime).Seconds())) }