Files
hk4e/gs/model/db_world.go
2023-03-04 20:14:26 +08:00

73 lines
1.4 KiB
Go

package model
import (
"hk4e/gdconf"
)
type DbScene struct {
SceneId uint32
UnlockPointMap map[uint32]bool
}
type DbWorld struct {
SceneMap map[uint32]*DbScene
}
func (p *Player) GetDbWorld() *DbWorld {
if p.DbWorld == nil {
p.DbWorld = NewDbWorld()
}
return p.DbWorld
}
func NewDbWorld() *DbWorld {
r := &DbWorld{
SceneMap: make(map[uint32]*DbScene),
}
return r
}
func NewScene(sceneId uint32) *DbScene {
r := &DbScene{
SceneId: sceneId,
UnlockPointMap: make(map[uint32]bool),
}
return r
}
func (w *DbWorld) GetSceneById(sceneId uint32) *DbScene {
scene, exist := w.SceneMap[sceneId]
// 不存在自动创建场景
if !exist {
// 拒绝创建配置表中不存在的非法场景
sceneDataConfig := gdconf.GetSceneDataById(int32(sceneId))
if sceneDataConfig == nil {
return nil
}
scene = NewScene(sceneId)
w.SceneMap[sceneId] = scene
}
return scene
}
func (s *DbScene) GetUnlockPointList() []uint32 {
unlockPointList := make([]uint32, 0)
for pointId := range s.UnlockPointMap {
unlockPointList = append(unlockPointList, pointId)
}
return unlockPointList
}
func (s *DbScene) UnlockPoint(pointId uint32) {
pointDataConfig := gdconf.GetScenePointBySceneIdAndPointId(int32(s.SceneId), int32(pointId))
if pointDataConfig == nil {
return
}
s.UnlockPointMap[pointId] = true
}
func (s *DbScene) CheckPointUnlock(pointId uint32) bool {
_, exist := s.UnlockPointMap[pointId]
return exist
}