game_sync/gamesrv/chess/player.go

71 lines
1.6 KiB
Go

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()))
}