You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.5 KiB
80 lines
1.5 KiB
|
|
local function table_remove(a, k)
|
|
for i, v in ipairs(a) do
|
|
if v == k then
|
|
table.remove(a, i)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
local function table_append(a, b)
|
|
for _, bv in ipairs(b) do
|
|
for i, av in ipairs(a) do
|
|
if av[1] == bv[1] then
|
|
table.remove(a, i)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
local pos = 1
|
|
for _, v in ipairs(b) do
|
|
table.insert(a, pos, v)
|
|
pos = pos + 1
|
|
end
|
|
end
|
|
|
|
local function merge_define(a, b)
|
|
for section, keyvalue in pairs(b) do
|
|
if not a[section] then
|
|
a[section] = {}
|
|
end
|
|
table_append(a[section], keyvalue)
|
|
end
|
|
end
|
|
|
|
local function merge_ui(type, a, b)
|
|
local aca = a.categories[type]
|
|
local bca = b.categories[type]
|
|
local aui = a.ui[type]
|
|
local bui = b.ui[type]
|
|
for k, bv in pairs(bui) do
|
|
if aui[k] then
|
|
table_remove(aca[aui[k].category], aui[k])
|
|
end
|
|
aui[k] = bv
|
|
end
|
|
local pos = 1
|
|
for _, category in ipairs(bca) do
|
|
if not aca[category] then
|
|
table.insert(aca, pos, category)
|
|
pos = pos + 1
|
|
aca[category] = bca[category]
|
|
else
|
|
for i, v in ipairs(aca) do
|
|
if v == category then
|
|
pos = i + 1
|
|
break
|
|
end
|
|
end
|
|
local a, b = aca[category], bca[category]
|
|
local pos = 1
|
|
for _, v in ipairs(b) do
|
|
table.insert(a, pos, v)
|
|
pos = pos + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return function (a, b)
|
|
if not a then
|
|
return b
|
|
end
|
|
merge_define(a.ui.define, b.ui.define)
|
|
merge_ui('event', a, b)
|
|
merge_ui('condition', a, b)
|
|
merge_ui('action', a, b)
|
|
merge_ui('call', a, b)
|
|
return a
|
|
end
|
|
|