From 0c910820036d9c65ae62f8ea0a27c1da012ff186 Mon Sep 17 00:00:00 2001 From: "kepler155c@gmail.com" Date: Fri, 15 Mar 2019 08:26:56 -0400 Subject: [PATCH] modules as devices --- sys/extensions/1.device.lua | 3 +-- sys/extensions/3.modules.lua | 47 ++++++++++++++++++++++++++++++++++++ sys/help/CloudCatcher | 2 +- 3 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 sys/extensions/3.modules.lua diff --git a/sys/extensions/1.device.lua b/sys/extensions/1.device.lua index d580563..f8bc7a9 100644 --- a/sys/extensions/1.device.lua +++ b/sys/extensions/1.device.lua @@ -59,8 +59,7 @@ end) kernel.hook('peripheral_detach', function(_, eventData) local side = eventData[1] if side then - local dev = Util.find(device, 'side', side) - if dev then + for _, dev in pairs(Util.findAll(device, 'side', side)) do os.queueEvent('device_detach', dev.name, dev) if dev._children then for _,v in pairs(dev._children) do diff --git a/sys/extensions/3.modules.lua b/sys/extensions/3.modules.lua new file mode 100644 index 0000000..f2411a3 --- /dev/null +++ b/sys/extensions/3.modules.lua @@ -0,0 +1,47 @@ +local Util = require('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 + device[k] = dev + 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 + device[k] = v + os.queueEvent('device_attach', k, v) + end + end +end) diff --git a/sys/help/CloudCatcher b/sys/help/CloudCatcher index e50dd86..7494099 100644 --- a/sys/help/CloudCatcher +++ b/sys/help/CloudCatcher @@ -1,5 +1,5 @@ Cloud Catcher is a web terminal for ComputerCraft, allowing you to interact with any in-game computer in the browser, as well as edit files remotely! -To get started, visit https://cloud-catcher.squiddev.cc/cloud.lua for a session key. +To get started, visit https://cloud-catcher.squiddev.cc for a session key. Within Files, press 'c' to edit a file using Cloud Catcher.