GSServer-CBT/soggy_resources/lua/Base/SceneData.lua
Akbar Yahya e0d4d8040c melon
2022-11-21 16:30:31 +08:00

272 lines
6.4 KiB
Lua

local SceneData = {}
SceneData.SceneDataDic = {}
SceneData.DefaultSceneID = 3
SceneData.currSceneID = -1
SceneData.ClearScene = function(self)
if SceneData.currSceneID <= 0 then
return
end
SceneData.SceneDataDic[SceneData.currSceneID] = nil
end
local function DoRequire(path)
util.do_require(path)
end
local function GetSceneDataSchemePath(sceneID)
local sceneIDStr = tostring(sceneID)
local path = "Scene/" .. sceneIDStr .. "/scene" .. sceneIDStr
return path
end
local function AddEntityInfoToDic(infos, dic)
if infos == nil then
return
end
for i = 1, #infos do
local info = infos[i]
dic[info.config_id] = info
end
end
local function ClearTempSceneData()
groups = nil
dummy_points = nil
routes_config = nil
routes = nil
monsters = nil
npcs = nil
gadgets = nil
regions = nil
triggers = nil
variables = nil
init_config = nil
end
local function CreateSceneData(schemePath)
DoRequire(schemePath)
local sceneData =
{
scene_config = nil,
blocks = nil,
groups = nil,
dummy_points = nil,
routes = nil,
ConfigType ={
Monster = 0,
Npc = 1,
Gadget = 2,
},
GetConfig = function(self, groupID, configID, type)
local groupInfo = self.groups[groupID]
if groupInfo == nil then
return nil
end
if type == self.ConfigType.Monster then
return groupInfo.monsterDic[configID]
elseif type == self.ConfigType.Npc then
return groupInfo.npcDic[configID]
elseif type == self.ConfigType.Gadget then
return groupInfo.gadgetDic[configID]
else
return nil
end
end,
GetMonsterConfig = function(self, groupID, configID)
return self:GetConfig(groupID, configID, self.ConfigType.Monster)
end,
GetNpcConfig = function(self, groupID, configID)
return self:GetConfig(groupID, configID, self.ConfigType.Npc)
end,
GetGadgetConfig = function(self, groupID, configID)
return self:GetConfig(groupID, configID, self.ConfigType.Gadget)
end,
GetInitGadgets = function(self)
local gadgetList = {}
local cnt = 1
for k, v in pairs(self.groups) do
local groupID = k
if v ~= nil and v.initConfig ~= nil then
for i = 1, #(v.initConfig.gadgets) do
local configID = v.initConfig.gadgets[i]
local config = self:GetGadgetConfig(groupID, configID)
gadgetList[cnt] = config
cnt = cnt + 1
end
end
end
return gadgetList
end,
GetInitNpcs = function(self)
local npcList = {}
local cnt = 1
for k, v in pairs(self.groups) do
local groupID = k
if v ~= nil and v.initConfig ~= nil then
for i = 1, #(v.initConfig.npcs) do
local configID = v.initConfig.npcs[i]
local config = self:GetNpcConfig(groupID, configID)
npcList[cnt] = config
cnt = cnt + 1
end
end
end
return npcList
end,
GetSuiteGadgets = function(self)
local gadgetList = {}
local cnt = 1
--每个group
for k, v in pairs(self.groups) do
local groupID = k
if v ~= nil and v.suites ~= nil then
--每个suite
for i = 1, #(v.suites) do
local suite = v.suites[i]
if(suite.gadgets~=nil) then
for key,value in pairs(suite.gadgets) do
local configID = value
local config = self:GetGadgetConfig(groupID, configID)
gadgetList[cnt] = config
cnt = cnt + 1
end
end
end
end
end
return gadgetList
end,
GetDummyPoint = function(self, dummyName)
if self.dummy_points == nil then
return nil
end
local dummyPoint = nil
if self.dummy_points[dummyName] ~= nil then
dummyPoint = self.dummy_points[dummyName]
end
return dummyPoint
end,
GetRouteConfig = function(self, routeName)
if self.routes == nil then
return nil
end
local routeConfig = nil
if self.routes[routeName] ~= nil then
routeConfig = self.routes[routeName]
end
return routeConfig
end
}
sceneData.scene_config = scene_config
local blocksDic = {}
local groupDic = {}
if blocks == nil then
blocks = {}
end
print(#blocks)
for i=1 , #blocks do
local blockData = { groups = nil }
local blockIndex = blocks[i]
local blockIndexStr = tostring(blockIndex)
local blockPath = schemePath .. "_block" .. blockIndexStr
DoRequire(blockPath)
if groups == nil then
groups = {}
end
blockData.groups = groups
blocksDic[blockIndex] = blockData
for j=1 , #groups do
local group = groups[j]
local groupIndexStr = tostring(group.id)
local groupPath = schemePath .. "_group" .. groupIndexStr
DoRequire(groupPath)
local groupInfo = { monsterDic = {}, npcDic = {}, gadgetDic = {}, regionDic = {}, triggerDic = {}, variables = {}, initConfig = {}, suites = {}}
AddEntityInfoToDic(monsters, groupInfo.monsterDic)
AddEntityInfoToDic(npcs, groupInfo.npcDic)
AddEntityInfoToDic(gadgets, groupInfo.gadgetDic)
AddEntityInfoToDic(regions, groupInfo.regionDic)
groupInfo.suites = suites
groupInfo.initConfig = init_config
groupDic[group.id] = groupInfo
end
end
sceneData.blocks = blocksDic
sceneData.groups = groupDic
if dummy_points ~= nil and #dummy_points > 0 then
local dummy_point_path = schemePath .. "_" .. dummy_points[1]
DoRequire(dummy_point_path)
sceneData.dummy_points = dummy_points
end
if routes_config ~= nil and #routes_config > 0 then
local routes_path = schemePath .. "_" .. routes_config[1]
DoRequire(routes_path)
sceneData.routes = routes
end
--clear temp data
ClearTempSceneData()
return sceneData
end
SceneData.LoadScene = function(self, sceneID, isOnlyLoad)
print("######sceneID")
print(sceneID)
local sceneData = SceneData.SceneDataDic[sceneID]
if sceneData ~= nil then
if not isOnlyLoad then
SceneData.currSceneID = sceneID
end
return sceneData
end
local schemePath = GetSceneDataSchemePath(sceneID)
sceneData = CreateSceneData(schemePath)
SceneData.SceneDataDic[sceneID] = sceneData
if not isOnlyLoad then
SceneData.currSceneID = sceneID
end
return sceneData
end
SceneData.GetSceneData = function(self, sceneID)
local sceneData = SceneData.SceneDataDic[sceneID]
if sceneData == nil then
sceneData = SceneData.LoadScene(self, sceneID, true)
end
return sceneData
end
SceneData.GetDummyPoint = function(self, sceneID, dummyName)
local sceneData = SceneData.GetSceneData(self, sceneID)
return sceneData:GetDummyPoint(dummyName)
end
SceneData.GetRouteConfig = function(self, sceneID, routeName)
local sceneData = SceneData.GetSceneData(self, sceneID)
return sceneData:GetRouteConfig(routeName)
end
return SceneData