game_sync/worldsrv/coinscenepool_chess.go

58 lines
1.3 KiB
Go

package main
import (
"mongo.games.com/goserver/core/logger"
"mongo.games.com/game/common"
)
// 象棋特殊匹配实现
func init() {
RegisterCoinScenePool(common.GameId_ChesstitiansCambodian, new(CoinScenePoolChess))
RegisterCoinScenePool(common.GameId_ChesstitiansCambodianRobot, new(CoinScenePoolChess))
}
type CoinScenePoolChess struct {
BaseCoinScenePool
}
func (this *CoinScenePoolChess) New() interface{} {
return &ChessMatchPool{
IdItem: make(map[int32]*ChessMatchItem),
}
}
func (this *CoinScenePoolChess) OnPlayerEnter(pool *CoinScenePool, p *Player, scene *Scene) {
var cmp *ChessMatchPool
var ok bool
if pool != nil && pool.extraData != nil {
cmp, ok = pool.extraData.(*ChessMatchPool)
}
if !ok || cmp == nil {
logger.Logger.Errorf("(this *CoinScenePoolChess) OnPlayerEnter not found ChessMatchPool")
return
}
if scene.IsFull() {
for k := range scene.players {
cmp.Del(k)
}
} else {
cmp.Add(p.SnId, p.ChessGrade, scene.sceneId)
}
}
func (this *CoinScenePoolChess) OnPlayerLeave(pool *CoinScenePool, s *Scene, p *Player) {
var cmp *ChessMatchPool
var ok bool
if pool != nil && pool.extraData != nil {
cmp, ok = pool.extraData.(*ChessMatchPool)
}
if !ok || cmp == nil {
logger.Logger.Errorf("(this *CoinScenePoolChess) OnPlayerLeave not found ChessMatchPool")
return
}
cmp.Del(p.SnId)
}