2025-10-31 23:54:56 +03:00

71 lines
1.4 KiB
Lua

local rules = {nexid = 1, rules = {}}
function rules.get_rule(name)
local rule = rules.rules[name]
if rule == nil then
rule = {listeners={}}
rules.rules[name] = rule
end
return rule
end
function rules.get(name)
local rule = rules.rules[name]
if rule == nil then
return nil
end
return rule.value
end
function rules.set(name, value)
local rule = rules.get_rule(name)
rule.value = value
for _, handler in pairs(rule.listeners) do
handler(value)
end
end
function rules.reset(name)
local rule = rules.get_rule(name)
rules.set(rule.default)
end
function rules.listen(name, handler)
local rule = rules.get_rule(name)
local id = rules.nexid
rules.nextid = rules.nexid + 1
rule.listeners[utf8.encode(id)] = handler
return id
end
function rules.create(name, value, handler)
local rule = rules.get_rule(name)
rule.default = value
local handlerid
if handler ~= nil then
handlerid = rules.listen(name, handler)
end
if rules.get(name) == nil then
rules.set(name, value)
elseif handler then
handler(rules.get(name))
end
return handlerid
end
function rules.unlisten(name, id)
local rule = rules.rules[name]
if rule == nil then
return
end
rule.listeners[utf8.encode(id)] = nil
end
function rules.clear()
rules.rules = {}
rules.nextid = 1
end
return rules