milo cleanup + shop
This commit is contained in:
122
swshop/jua.lua
Normal file
122
swshop/jua.lua
Normal file
@@ -0,0 +1,122 @@
|
||||
local juaVersion = "0.0"
|
||||
|
||||
juaRunning = false
|
||||
eventRegistry = {}
|
||||
timedRegistry = {}
|
||||
|
||||
local function registerEvent(event, callback)
|
||||
if eventRegistry[event] == nil then
|
||||
eventRegistry[event] = {}
|
||||
end
|
||||
|
||||
table.insert(eventRegistry[event], callback)
|
||||
end
|
||||
|
||||
local function registerTimed(time, repeating, callback)
|
||||
if repeating then
|
||||
callback(true)
|
||||
end
|
||||
|
||||
table.insert(timedRegistry, {
|
||||
time = time,
|
||||
repeating = repeating,
|
||||
callback = callback,
|
||||
timer = os.startTimer(time)
|
||||
})
|
||||
end
|
||||
|
||||
local function discoverEvents(event)
|
||||
local evs = {}
|
||||
for k,v in pairs(eventRegistry) do
|
||||
if k == event or string.match(k, event) or event == "*" then
|
||||
for i,v2 in ipairs(v) do
|
||||
table.insert(evs, v2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return evs
|
||||
end
|
||||
|
||||
function on(event, callback)
|
||||
registerEvent(event, callback)
|
||||
end
|
||||
|
||||
function setInterval(callback, time)
|
||||
registerTimed(time, true, callback)
|
||||
end
|
||||
|
||||
function setTimeout(callback, time)
|
||||
registerTimed(time, false, callback)
|
||||
end
|
||||
|
||||
function tick()
|
||||
local eargs = {os.pullEventRaw()}
|
||||
local event = eargs[1]
|
||||
|
||||
if eventRegistry[event] == nil then
|
||||
eventRegistry[event] = {}
|
||||
else
|
||||
local evs = discoverEvents(event)
|
||||
for i, v in ipairs(evs) do
|
||||
v(unpack(eargs))
|
||||
end
|
||||
end
|
||||
|
||||
if event == "timer" then
|
||||
local timer = eargs[2]
|
||||
|
||||
for i = #timedRegistry, 1, -1 do
|
||||
local v = timedRegistry[i]
|
||||
if v.timer == timer then
|
||||
v.callback(not v.repeating or nil)
|
||||
|
||||
if v.repeating then
|
||||
v.timer = os.startTimer(v.time)
|
||||
else
|
||||
table.remove(timedRegistry, i)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function run()
|
||||
os.queueEvent("init")
|
||||
juaRunning = true
|
||||
while juaRunning do
|
||||
tick()
|
||||
end
|
||||
end
|
||||
|
||||
function go(func)
|
||||
on("init", func)
|
||||
run()
|
||||
end
|
||||
|
||||
function stop()
|
||||
juaRunning = false
|
||||
end
|
||||
|
||||
function await(func, ...)
|
||||
local args = {...}
|
||||
local out
|
||||
local finished
|
||||
func(function(...)
|
||||
out = {...}
|
||||
finished = true
|
||||
end, unpack(args))
|
||||
while not finished do tick() end
|
||||
return unpack(out)
|
||||
end
|
||||
|
||||
return {
|
||||
on = on,
|
||||
setInterval = setInterval,
|
||||
setTimeout = setTimeout,
|
||||
tick = tick,
|
||||
run = run,
|
||||
go = go,
|
||||
stop = stop,
|
||||
await = await
|
||||
}
|
||||
Reference in New Issue
Block a user