forked from endernon/PGRData
106 lines
No EOL
3.1 KiB
Lua
106 lines
No EOL
3.1 KiB
Lua
--===========================
|
|
--超限乱斗核心管理器
|
|
--模块负责:吕天元
|
|
--===========================
|
|
local XSmashBCoreManager = {}
|
|
---@type XSmashBCore[]
|
|
local Cores
|
|
local CoresById
|
|
local TransEnergy = 0 --玩家已经转换的能量
|
|
--=============
|
|
--初始化
|
|
--=============
|
|
function XSmashBCoreManager.Init(activityId)
|
|
Cores = {}
|
|
CoresById = {}
|
|
local coreCfgs = XSuperSmashBrosConfig.GetAllConfigs(XSuperSmashBrosConfig.TableKey.CoreConfig)
|
|
local coreScript = require("XEntity/XSuperSmashBros/XSmashBCore")
|
|
for _, coreCfg in pairs(coreCfgs or {}) do
|
|
local modeId = coreCfg.ModeId
|
|
local modeConfig = XSuperSmashBrosConfig.GetCfgByIdKey(XSuperSmashBrosConfig.TableKey.ModeConfig, modeId)
|
|
local modeActivityId = modeConfig.ActivityId
|
|
if activityId == modeActivityId then
|
|
local core = coreScript.New(coreCfg)
|
|
Cores[#Cores + 1] = core
|
|
CoresById[coreCfg.Id] = core
|
|
end
|
|
end
|
|
end
|
|
--=============
|
|
--刷新推送核心数据
|
|
--=============
|
|
function XSmashBCoreManager.RefreshNotifyCoreData(data)
|
|
for _, coreData in pairs(data.SuperCoreDbList) do
|
|
local core = CoresById[coreData.Id]
|
|
if core then
|
|
core:SetStar(coreData.Level)
|
|
core:SetAtkLevel(coreData.StrongAttack or 0)
|
|
core:SetLifeLevel(coreData.StrongHp or 0)
|
|
end
|
|
end
|
|
for _, coreInfo in pairs(data.CharacterMountCoreList) do
|
|
if coreInfo.CoreId > 0 then
|
|
local chara = XDataCenter.SuperSmashBrosManager.GetRoleById(coreInfo.CharacterId)
|
|
if chara then
|
|
chara:SetCore(coreInfo.CoreId)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
--=============
|
|
--获取所有核心对象
|
|
--索引为所属的模式优先级
|
|
--=============
|
|
function XSmashBCoreManager.GetAllCores()
|
|
return Cores or {}
|
|
end
|
|
--=============
|
|
--根据核心Id获取核心对象
|
|
--@param
|
|
--coreId : 核心Id - 配置表SuperSmashBrosCore Id
|
|
--=============
|
|
function XSmashBCoreManager.GetCoreById(coreId)
|
|
return CoresById[coreId]
|
|
end
|
|
--=============
|
|
--根据模式优先度获取核心对象
|
|
--@param
|
|
--priority : 模式优先度 - 配置表SuperSmashBrosMode Priority
|
|
--=============
|
|
function XSmashBCoreManager.GetCoreByMode(modeId)
|
|
local t = {}
|
|
for i = 1, #Cores do
|
|
local core = Cores[i]
|
|
if core:GetModeId() == modeId then
|
|
t[#t + 1] = core
|
|
end
|
|
end
|
|
return t
|
|
end
|
|
function XSmashBCoreManager.GetOneCore()
|
|
return Cores[1]
|
|
end
|
|
--=============
|
|
--检查是否有新的核心
|
|
--=============
|
|
function XSmashBCoreManager.CheckNewCoreFlag()
|
|
for _, core in pairs(Cores) do
|
|
if core:CheckNew() then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function XSmashBCoreManager.SortCores()
|
|
table.sort(Cores, function(coreA, coreB)
|
|
local unlockA = coreA:CheckIsLock() and 0 or 1
|
|
local unlockB = coreB:CheckIsLock() and 0 or 1
|
|
if unlockA ~= unlockB then
|
|
return unlockA > unlockB
|
|
end
|
|
return coreA:GetId() > coreB:GetId()
|
|
end)
|
|
end
|
|
|
|
return XSmashBCoreManager |