Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Modem
- local modem = peripheral.wrap("right")
- local thisChannel = 3101
- local mainHubChannel = 3000
- -- Lua classes
- local spawner = {}
- local spawnerItems = {}
- spawner.__index = spawner
- function init()
- if ( checkErrors() ) then
- error('error found')
- end
- modem.open(thisChannel)
- spawner:create('cow', 'top')
- spawner:create('spider', 'bottom')
- spawner:create('blitz', 'front')
- spawner:create('basalz', 'back')
- while true do
- loop()
- sleep(1)
- end
- end
- function loop()
- local event, modemSide, senderChannel,
- replyChannel, message, senderDistance = os.pullEvent("modem_message")
- if ( replyChannel == mainHubChannel and type(message) == 'table' ) then
- local command, spawnerName, spawnerState = message[1], message[2], message[3]
- print(type(command), command)
- print(type(spawnerName), spawnerName)
- print(type(spawnerState), spawnerState)
- if ( type(command) == 'string' and type(spawnerName) == 'string' and type(spawnerState) == 'boolean' and command == "setState" ) then
- if ( spawnerName == 'all' ) then
- for index, value in pairs(spawnerItems) do
- local theSpawner = spawner:get(index)
- if ( theSpawner ) then
- theSpawner:setState(spawnerState)
- end
- end
- return
- else
- local theSpawner = spawner:get(spawnerName)
- if ( theSpawner ) then
- theSpawner:setState(spawnerState)
- end
- end
- end
- else
- error('message-received, not a table')
- end
- end
- function checkErrors()
- return false
- end
- function spawner:create(name, side)
- if ( not spawnerItems[name] ) then
- local spawnerAttr = {}
- setmetatable(spawnerAttr,spawner)
- spawnerAttr.name = name
- spawnerAttr.side = side
- spawnerItems[name] = spawnerAttr
- rs.setOutput(side, true)
- return spawnerAttr
- else
- return "already created"
- end
- end
- function spawner:get(name)
- return spawnerItems[name]
- end
- function spawner:setState(state)
- rs.setOutput(self.side, not state)
- self.state = state
- return true
- end
- init()
Advertisement
Add Comment
Please, Sign In to add comment