Files
StellaSora_DataLua/lua/game/ui/jointdrill/jointdrillcontext.lua
T
SL1900 8c4bd41668 Update - 1.13.0.124
EN: 1.13.0.124
CN: 1.13.0.124
JP: 1.13.0.128
KR: 1.13.0.130
2026-07-21 12:30:00 +09:00

138 lines
4.8 KiB
Lua

local JointDrillContext = {}
JointDrillContext.Modes = {
[GameEnum.JointDrillMode.JointDrill_Mode_1] = {
sPlayerDataKey = "JointDrill_1",
nFormationType = AllEnum.RegionBossFormationType.JointDrill,
sCtrlNamespace = "Game.UI.JointDrill.JointDrill_1",
sPanelIdSuffix = "Mode1"
},
[GameEnum.JointDrillMode.JointDrill_Mode_2] = {
sPlayerDataKey = "JointDrill_2",
nFormationType = AllEnum.RegionBossFormationType.JointDrill_2,
sCtrlNamespace = "Game.UI.JointDrill.JointDrill_2",
sPanelIdSuffix = "Mode2"
}
}
JointDrillContext.PanelKeys = {
"LevelSelect",
"BuildList",
"Result",
"RankUp",
"Quest",
"Ranking",
"RankDetail",
"Raid"
}
JointDrillContext.PrefabNames = {
LevelSelect = "JointDrillLevelSelect",
BuildList = "JointDrillBuildList",
Result = "JointDrillResultPanel",
RankUp = "JointDrillRankUpPanel",
Quest = "JointDrillQuestPanel",
Ranking = "JointDrillRankingPanel",
RankDetail = "JointDrillRankDetailPanel",
Raid = "JointDrillRaidPanel"
}
JointDrillContext.Aliases = {
[510004] = 510001
}
JointDrillContext.Entries = {
[510001] = {
nJointDrillMode = GameEnum.JointDrillMode.JointDrill_Mode_1
},
[510003] = {
nJointDrillMode = GameEnum.JointDrillMode.JointDrill_Mode_2
},
[510004] = {
nJointDrillMode = GameEnum.JointDrillMode.JointDrill_Mode_1
},
[510005] = {
nJointDrillMode = GameEnum.JointDrillMode.JointDrill_Mode_2
},
[510006] = {
nJointDrillMode = GameEnum.JointDrillMode.JointDrill_Mode_2
}
}
local _GetEntryOrDie = function(nActId, sCaller)
local entry = JointDrillContext.Entries[nActId]
assert(entry, string.format("JointDrillContext.%s: unknown nActId=%s", sCaller, tostring(nActId)))
return entry
end
local _GetModeInfoOrDie = function(entry, nActId, sCaller)
local modeInfo = JointDrillContext.Modes[entry.nJointDrillMode]
assert(modeInfo, string.format("JointDrillContext.%s: nActId=%d declares unknown nJointDrillMode=%s", sCaller, nActId, tostring(entry.nJointDrillMode)))
return modeInfo
end
local _ResolvePanelId = function(nActId, sPanelKey)
local entry = _GetEntryOrDie(nActId, "GetPanelId")
local modeInfo = _GetModeInfoOrDie(entry, nActId, "GetPanelId")
local sName
if modeInfo.sPanelIdSuffix then
sName = string.format("JointDrill%s_%s", sPanelKey, modeInfo.sPanelIdSuffix)
else
local nResId = JointDrillContext.Aliases[nActId] or nActId
sName = string.format("JointDrill%s_%d", sPanelKey, nResId)
end
local nPanelId = PanelId[sName]
assert(nPanelId, string.format("JointDrillContext: PanelId.%s not registered (nActId=%d, sPanelKey=%s)", sName, nActId, tostring(sPanelKey)))
return nPanelId
end
local _BuildPanelIdTable = function(nActId)
local t = {}
for _, sKey in ipairs(JointDrillContext.PanelKeys) do
t[sKey] = _ResolvePanelId(nActId, sKey)
end
return t
end
function JointDrillContext.Get(nActId)
local entry = _GetEntryOrDie(nActId, "Get")
local modeInfo = _GetModeInfoOrDie(entry, nActId, "Get")
return {
nActId = nActId,
nJointDrillMode = entry.nJointDrillMode,
sPlayerDataKey = modeInfo.sPlayerDataKey,
nFormationType = modeInfo.nFormationType,
sCtrlNamespace = modeInfo.sCtrlNamespace,
tbPanelId = _BuildPanelIdTable(nActId)
}
end
function JointDrillContext.GetPanelId(nActId, sPanelKey)
return _ResolvePanelId(nActId, sPanelKey)
end
function JointDrillContext.GetPrefabPath(nActId, sPanelKey)
_GetEntryOrDie(nActId, "GetPrefabPath")
local sPrefabName = JointDrillContext.PrefabNames[sPanelKey]
assert(sPrefabName, string.format("JointDrillContext.GetPrefabPath: unknown sPanelKey=%s", tostring(sPanelKey)))
local nResId = JointDrillContext.Aliases[nActId] or nActId
return string.format("_%d/%s.prefab", nResId, sPrefabName)
end
function JointDrillContext.GetMode(nJointDrillMode)
local modeInfo = JointDrillContext.Modes[nJointDrillMode]
assert(modeInfo, string.format("JointDrillContext.GetMode: unknown nJointDrillMode=%s", tostring(nJointDrillMode)))
return modeInfo
end
function JointDrillContext.GetByMode(nJointDrillMode)
for nActId, entry in pairs(JointDrillContext.Entries) do
if entry.nJointDrillMode == nJointDrillMode then
return JointDrillContext.Get(nActId)
end
end
error(string.format("JointDrillContext.GetByMode: no entry with nJointDrillMode=%s", tostring(nJointDrillMode)))
end
function JointDrillContext.GetActIdForMode(nJointDrillMode)
local modeInfo = JointDrillContext.Modes[nJointDrillMode]
assert(modeInfo, string.format("JointDrillContext.GetActIdForMode: unknown nJointDrillMode=%s", tostring(nJointDrillMode)))
local pd = PlayerData[modeInfo.sPlayerDataKey]
local nActId = pd and pd.nActId
if nActId and nActId ~= 0 and JointDrillContext.Entries[nActId] then
return nActId
end
for entryId, entry in pairs(JointDrillContext.Entries) do
if entry.nJointDrillMode == nJointDrillMode then
return entryId
end
end
error(string.format("JointDrillContext.GetActIdForMode: no entry with nJointDrillMode=%s", tostring(nJointDrillMode)))
end
return JointDrillContext