game_sync/worldsrv/matchcontext.go

73 lines
1.6 KiB
Go

package main
import "sort"
type PlayerMatchContext struct {
tm *TmMatch //比赛
p *Player //玩家数据
round int32 //第几轮
seq int //报名序号
grade int32 //比赛积分
rank int32 //当前第几名
gaming bool //是否比赛中
record map[int32]int32 //战绩 胜负次数统计
copySnid int32
copyLv int32
copyRoleId int32
copySkinId int32
}
type MatchContextSlice []*PlayerMatchContext
func (p MatchContextSlice) Len() int { return len(p) }
func (p MatchContextSlice) Less(i, j int) bool {
if p[i].grade > p[j].grade {
return true
} else if p[i].grade == p[j].grade {
return p[i].seq < p[j].seq
} else {
return false
}
}
func (p MatchContextSlice) Swap(i, j int) {
p[i], p[j] = p[j], p[i]
}
func (p MatchContextSlice) Sort(isFinals bool) {
sort.Sort(p)
for i, mc := range p {
mc.rank = int32(i + 1)
}
//if isFinals {
// // 积分相同名次相同
// lastRank := int32(0)
// lastGrade := int32(0)
// for i := 0; i < len(p); i++ {
// mc := p[i]
// if i > 0 && mc.grade == lastGrade {
// mc.rank = lastRank
// }
// lastRank = mc.rank
// lastGrade = mc.grade
// }
//}
}
func NewMatchContext(p *Player, tm *TmMatch, grade, snid, lv, roleId, skinId int32, seq int) *PlayerMatchContext {
if !p.IsRob {
snid = p.SnId
}
return &PlayerMatchContext{
tm: tm,
p: p,
grade: grade,
seq: seq,
rank: int32(seq),
copySnid: snid,
copyLv: lv,
copyRoleId: roleId,
copySkinId: skinId,
}
}