game_sync/gamesrv/chess/player.go

89 lines
2.1 KiB
Go

package chesstitians
import (
rule "mongo.games.com/game/gamerule/chess"
"mongo.games.com/game/gamesrv/base"
"mongo.games.com/game/model"
"time"
)
// 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{}
if !p.GetScene().IsMatchScene() && !p.GetScene().IsPrivateScene() { //非比赛场 非私有房间
p.LoadPlayerGameInfo(p.GetScene().KeyGameId)
}
}
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
}
func (p *PlayerEx) LoadPlayerGameInfo(keyGameId string) {
if p.IsRob {
return
}
if p.GDatas == nil {
p.GDatas = make(map[string]*model.PlayerGameInfo)
}
if data, exist := p.GDatas[keyGameId]; !exist {
data = new(model.PlayerGameInfo)
data.Statics.TotalOut = 920000
data.Statics.TotalIn = 1000000
p.GDatas[keyGameId] = data
}
}
// 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()))
}