turned evmgr into a module

modules that require getting events will need to have "evmgr" as a
dependency
This commit is contained in:
Ponali
2025-10-15 13:52:28 +02:00
parent e1270d7bd7
commit a020229a69
4 changed files with 85 additions and 92 deletions
+84
View File
@@ -0,0 +1,84 @@
local module = {}
module.dependencies = { "tsched", "keyboard" }
function module.check()
return true
end
local process
function module.init()
_G.evmgr = {}
_G.evmgr.eventQueue = {}
local maxEventQueueLength = 10 -- increase if events start getting dropped
local computer = require("computer")
local ctrlDown = false
local altDown = false
local shiftDown = false
function _G._PUBLIC.keyboard.getCtrlDown()
return ctrlDown
end
function _G._PUBLIC.keyboard.getAltDown()
return altDown
end
function _G._PUBLIC.keyboard.getShiftDown()
return shiftDown
end
_, process = _PUBLIC.tsched.addTask(function()
while true do
local args
repeat
args = { computer.uptime(), computer.pullSignal(0) }
if args and args[2] then
table.insert(evmgr.eventQueue, args)
if _PUBLIC.keyboard then
if args[2] == "key_down" then
local keycode = args[5]
local key = _PUBLIC.keyboard.keys[keycode]
if key == "lcontrol" then
ctrlDown = true
elseif key == "lmenu" then
altDown = true
elseif key == "lshift" then
shiftDown = true
elseif key == "c" and ctrlDown and altDown then
if print then
print("\n\27[91mCoroutine " .. tostring(#tsched.tasks) .. " killed.")
end
table.remove(tsched.tasks, #tsched.tasks)
end
elseif args[2] == "key_up" then
local keycode = args[5]
local key = _PUBLIC.keyboard.keys[keycode]
if key == "lcontrol" then
ctrlDown = false
elseif key == "lmenu" then
altDown = false
elseif key == "lshift" then
shiftDown = true
end
end
end
while #evmgr.eventQueue > maxEventQueueLength do
--ocelot.log("Queue length breach, removing first signal")
table.remove(evmgr.eventQueue, 1)
end
end
until not args or not args[1]
--ocelot.log("done")
coroutine.yield()
end
end, "evmgr")
end
function module.exit()
_G.evmgr = nil
_PUBLIC.tsched.removeTask(process.id)
end
return module