opus/sys/init/3.modules.lua

53 lines
1.1 KiB
Lua

local Util = require('opus.util')
local device = _G.device
local kernel = _G.kernel
local os = _G.os
local peripheral = _G.peripheral
local containers = {
manipulator = true,
neuralInterface = true,
}
local function getModules(dev, side)
local list = { }
if dev then
for _, module in pairs(dev.listModules()) do
list[module] = Util.shallowCopy(dev)
list[module].name = module
list[module].type = module
list[module].side = side
end
end
return list
end
for _,v in pairs(device) do
if containers[v.type] then
local list = getModules(v, v.side)
for k, dev in pairs(list) do
-- neural and attached modules have precedence over manipulator modules
if not device[k] or v.type ~= 'manipulator' then
device[k] = dev
end
end
end
end
-- register modules as peripherals
kernel.hook('device_attach', function(_, eventData)
local dev = eventData[2]
if dev and containers[dev.type] then
local list = getModules(peripheral.wrap(dev.side), dev.side)
for k,v in pairs(list) do
if not device[k] or dev.type ~= 'manipulator' then
device[k] = v
os.queueEvent('device_attach', k, v)
end
end
end
end)