PGRData/Script/matrix/xentity/xsupertower/XSuperTowerPluginSlotManager.lua

158 lines
No EOL
4.8 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XSuperTowerPlugin = require("XEntity/XSuperTower/Plugin/XSuperTowerPlugin")
local XSuperTowerPluginSlotManager = XClass(nil, "XSuperTowerPluginSlotManager")
function XSuperTowerPluginSlotManager:Ctor()
self.PluginSlots = {}
self.MaxCapacity = XSuperTowerConfigs.GetBaseConfigByKey("MaxTeamPluginCount")
self.CurrentCapacity = 0
self.StageId = nil
end
function XSuperTowerPluginSlotManager:SetStageId(value)
self.StageId = value
end
function XSuperTowerPluginSlotManager:SetMaxCapacity(value)
self.MaxCapacity = value
end
function XSuperTowerPluginSlotManager:GetStageId()
return self.StageId
end
--===========================
--把另一个Slot的内容添加入此Slot
--===========================
function XSuperTowerPluginSlotManager:AddSlot(pluginSlot)
local addPluginList = pluginSlot:GetPluginsNotSplit()
if addPluginList and #addPluginList == 0 then return end
local originPluginList = self:GetPluginsNotSplit()
local originDic = {}
for _, originPlugin in pairs(originPluginList) do
originDic[originPlugin:GetId()] = originPlugin
end
self:Clear()
for _, plugin in pairs(addPluginList) do
local originPlugin = originDic[plugin:GetId()]
if originPlugin then
originPlugin:UpdateCount(originPlugin:GetCount() + plugin:GetCount())
else
originDic[plugin:GetId()] = plugin
end
end
for _, newPlugin in pairs(originDic) do
self:AddPluginById(newPlugin:GetId(), newPlugin:GetCount())
end
end
function XSuperTowerPluginSlotManager:AddPluginById(pluginId, count)
if not pluginId then return end
for i = 1, count do
local plugin = XSuperTowerPlugin.New(pluginId)
plugin:UpdateCount(1)
self:AddPlugin(plugin)
end
end
-- plugin : XSuperTowerPlugin
function XSuperTowerPluginSlotManager:AddPlugin(plugin, slot)
if not plugin then return end
if slot ~= nil then
if self.PluginSlots[slot] == 0 or self.PluginSlots[slot] == nil then
self.CurrentCapacity = self.CurrentCapacity + 1
end
self.PluginSlots[slot] = plugin
else
for i = 1, self.MaxCapacity do
if self.PluginSlots[i] == 0 or self.PluginSlots[i] == nil then
self.PluginSlots[i] = plugin
self.CurrentCapacity = self.CurrentCapacity + 1
return i
end
end
end
return slot
end
function XSuperTowerPluginSlotManager:DeletePlugin(slot)
if slot == nil then return end
local plugin = self.PluginSlots[slot]
if plugin then
self.CurrentCapacity = self.CurrentCapacity - 1
end
self.PluginSlots[slot] = 0
end
-- return : { plugin, plugin, 0, plugin }
-- PS: 0是数组的占位符通过0判断该槽位为nil直接设置为nil的话到导致数组遍历连续
function XSuperTowerPluginSlotManager:GetPlugins(isCheckBag)
if isCheckBag then
local result = XTool.Clone(self.PluginSlots)
local bagManager = XDataCenter.SuperTowerManager.GetBagManager()
for i, plugin in ipairs(self.PluginSlots) do
if type(plugin) == "table" and not bagManager:GetIsHaveData(plugin:GetId()) then
result[i] = 0
end
end
return result
end
return self.PluginSlots
end
function XSuperTowerPluginSlotManager:GetPluginsSplit()
local result = {}
for _, plugin in pairs(self.PluginSlots) do
if type(plugin) == "table" then
table.insert(result, plugin)
end
end
return result
end
function XSuperTowerPluginSlotManager:GetPluginsNotSplit()
local result = {}
local pluginCountDic = {}
local pluginId
for _, plugin in pairs(self.PluginSlots) do
if type(plugin) == "table" then
pluginId = plugin:GetId()
pluginCountDic[pluginId] = pluginCountDic[pluginId] or 0
pluginCountDic[pluginId] = pluginCountDic[pluginId] + plugin:GetCount()
end
end
local plugin
for pluginId, count in pairs(pluginCountDic) do
if count > 0 then
plugin = XSuperTowerPlugin.New(pluginId)
plugin:UpdateCount(count)
table.insert(result, plugin)
end
end
return result
end
function XSuperTowerPluginSlotManager:Clear()
self.PluginSlots = {}
self.StageId = nil
self.CurrentCapacity = 0
end
function XSuperTowerPluginSlotManager:GetIsEmpty()
return self.CurrentCapacity <= 0
-- if #self.PluginSlots <= 0 then return true end
-- for _, plugin in ipairs(self.PluginSlots) do
-- if type(plugin) == "table" then
-- return false
-- end
-- end
-- return true
end
function XSuperTowerPluginSlotManager:GetCurrentCapacity()
return self.CurrentCapacity
end
function XSuperTowerPluginSlotManager:GetMaxCapacity()
return self.MaxCapacity
end
return XSuperTowerPluginSlotManager