PGRData/Script/matrix/xredpoint/XRedPointConditionGroup.lua
2024-09-01 22:49:41 +02:00

98 lines
No EOL
2.7 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.

--XRedPointConditionGroup.Conditions 存的是KEY[k1,k2......] 只要有一个条件满足就有红点
--XRedPointConditionGroup.Events 需要监听的事件[.....]
---@class XRedPointConditionGroup 條件組
---@field
local XRedPointConditionGroup = XClass(nil, "XRedPointConditionGroup")
--构成
function XRedPointConditionGroup:Ctor()
end
function XRedPointConditionGroup:Init(conditions)
self.Conditions = conditions
self.Events = {}
if conditions and #conditions > 0 then
for _, var in ipairs(conditions) do
self:GetSubConditions(var)
end
end
end
--递归获取需要监听的事件
function XRedPointConditionGroup:GetSubConditions(conditionId)
local condition = XRedPointConditions[conditionId]
if condition then
--收集子事件
if condition.GetSubEvents then
local events = condition.GetSubEvents()
if events then
for _, var in ipairs(events) do
self:AddConditions(var)
end
end
end
--收集子条件
if condition.GetSubConditions then
local subConditions = condition.GetSubConditions()
if subConditions then
for _, var in ipairs(subConditions) do
self:GetSubConditions(var)
end
end
end
end
end
--添加一个子事件
function XRedPointConditionGroup:AddConditions(element)
if not element then
return
end
if self.Events[element.EventId] then
-- XLog:Warning("RedPoint Condition Events Repeated!!!"..element.EventId)
return
end
self.Events[element.EventId] = element
end
--条件组检测 返回 0 代表true ,大于0 代表有数量 -1就是条件不满足
function XRedPointConditionGroup:Check(args)
if not self.Conditions or #self.Conditions <= 0 then
return -1
end
local result = -1
for _, v in ipairs(self.Conditions) do
if XRedPointConditions[v] ~= nil then
if not XRedPointManager.CheckIsFitter(v) then --检测需要过滤的红点事件
local r = XRedPointConditions[v].Check(args)
-- 0 代表true ,大于0 代表有数量 -1就是条件不满足
if type(r) == "number" then
if result >= 0 or r <= 0 then
result = result + r
else
result = r
end
elseif r == true and result == -1 then
result = 0
end
end
end
end
return result
end
function XRedPointConditionGroup:Release()
self.Conditions = nil
self.Events = nil
end
return XRedPointConditionGroup