Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function wrap(side, filter)
- local obj = {}
- local members = {}
- -- local filter = filter
- function obj:__index(index)
- return function(...)
- assert(filter, 'No peripheral filter set! Use group.filter')
- local returns = {}
- for i, periph in pairs(members) do
- if peripheral.getType(i) == filter then
- local value = periph[index]
- assert(value, filter..'.'..index..' does not exist')
- local args = {...}
- if type(args[1]) == 'function' then
- local res = {args[1](periph, i)}
- args = #res > 0 and res or nil
- end
- if args then
- if type(value) == 'function' then
- local res = {value(unpack(args))}
- if res then
- returns[i] = res
- end
- else
- returns[i] = value
- end
- end
- end
- end
- return setmetatable(returns, returns)
- end
- end
- function obj.filter(new_filter)
- filter = new_filter or filter
- return filter
- end
- local modem = peripheral.wrap(side)
- local periphs = modem.getNamesRemote()
- for i=1, #periphs do
- local wrapped = peripheral.wrap(periphs[i])
- -- members[i] = wrapped
- members[periphs[i]] = wrapped
- end
- return setmetatable(obj, obj)
- end
Advertisement
Add Comment
Please, Sign In to add comment