game_sync/robot/base/scenemgr.go

81 lines
1.8 KiB
Go

package base
import (
"time"
"mongo.games.com/goserver/core/module"
server_proto "mongo.games.com/game/protocol/server"
"mongo.games.com/game/srvdata"
)
var SceneMgrSingleton = &SceneMgr{
Scenes: make(map[int32]IScene),
sceneDBGameFree: make(map[int32]*server_proto.DB_GameFree),
}
type SceneMgr struct {
Scenes map[int32]IScene
sceneDBGameFree map[int32]*server_proto.DB_GameFree
}
func (sm *SceneMgr) AddScene(s IScene) {
sm.Scenes[s.GetRoomId()] = s
}
func (sm *SceneMgr) DelScene(sceneId int32) {
delete(sm.Scenes, sceneId)
delete(sm.sceneDBGameFree, sceneId)
}
func (sm *SceneMgr) GetScene(sceneId int32) IScene {
if s, exist := sm.Scenes[sceneId]; exist {
return s
}
return nil
}
func (sm *SceneMgr) UpdateSceneDBGameFree(sceneId int32, dbGameFree *server_proto.DB_GameFree) {
sm.sceneDBGameFree[sceneId] = dbGameFree
}
func (sm *SceneMgr) GetSceneDBGameFree(sceneId, gamefreeId int32) *server_proto.DB_GameFree {
if data, exist := sm.sceneDBGameFree[sceneId]; exist {
return data
}
return srvdata.PBDB_GameFreeMgr.GetData(gamefreeId)
}
func (sm *SceneMgr) IsFreeMode(sceneId int32) bool {
if data, exist := sm.sceneDBGameFree[sceneId]; exist {
return data.GetFreeMode() == 1
}
return false
}
// //////////////////////////////////////////////////////////////////
// / Module Implement [beg]
// //////////////////////////////////////////////////////////////////
func (sm *SceneMgr) Update() {
for _, s := range sm.Scenes {
s.Update(time.Now().UnixMilli()) // 毫秒时间戳
}
return
}
func (sm *SceneMgr) Init() {
}
func (sm *SceneMgr) ModuleName() string {
return "SceneMgr-module"
}
func (sm *SceneMgr) Shutdown() {
module.UnregisteModule(sm)
}
func init() {
module.RegisteModule(SceneMgrSingleton, time.Millisecond*100, 0)
}