csmit195

spawnerChild

Sep 19th, 2018
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.09 KB | None | 0 0
  1. -- Modem
  2. local modem = peripheral.wrap("right")
  3. local thisChannel = 3101
  4. local mainHubChannel = 3000
  5.  
  6. -- Lua classes
  7. local spawner = {}
  8. local spawnerItems = {}
  9. spawner.__index = spawner
  10.  
  11. function init()
  12.   if ( checkErrors() ) then
  13.     error('error found')
  14.   end
  15.  
  16.   modem.open(thisChannel)
  17.  
  18.   spawner:create('cow', 'top')
  19.   spawner:create('spider', 'bottom')
  20.   spawner:create('blitz', 'front')
  21.   spawner:create('basalz', 'back')
  22.  
  23.   while true do
  24.     loop()
  25.     sleep(1)
  26.   end
  27. end
  28.  
  29. function loop()
  30.   local event, modemSide, senderChannel,
  31.   replyChannel, message, senderDistance = os.pullEvent("modem_message")
  32.   if ( replyChannel == mainHubChannel and type(message) == 'table' ) then
  33.     local command, spawnerName, spawnerState = message[1], message[2], message[3]
  34.     print(type(command), command)
  35.     print(type(spawnerName), spawnerName)
  36.     print(type(spawnerState), spawnerState)
  37.     if ( type(command) == 'string' and type(spawnerName) == 'string' and type(spawnerState) == 'boolean' and command == "setState" ) then
  38.       if ( spawnerName == 'all' ) then
  39.         for index, value in pairs(spawnerItems) do
  40.           local theSpawner = spawner:get(index)
  41.           if ( theSpawner ) then
  42.             theSpawner:setState(spawnerState)
  43.           end
  44.         end
  45.         return
  46.       else
  47.         local theSpawner = spawner:get(spawnerName)
  48.         if ( theSpawner ) then
  49.           theSpawner:setState(spawnerState)
  50.         end
  51.       end
  52.     end
  53.   else
  54.     error('message-received, not a table')
  55.   end
  56. end
  57.  
  58. function checkErrors()
  59.   return false
  60. end
  61.  
  62. function spawner:create(name, side)
  63.   if ( not spawnerItems[name] ) then
  64.     local spawnerAttr = {}
  65.     setmetatable(spawnerAttr,spawner)
  66.     spawnerAttr.name = name
  67.     spawnerAttr.side = side
  68.     spawnerItems[name] = spawnerAttr
  69.     rs.setOutput(side, true)
  70.     return spawnerAttr
  71.   else
  72.     return "already created"
  73.   end
  74. end
  75.  
  76. function spawner:get(name)
  77.   return spawnerItems[name]
  78. end
  79.  
  80. function spawner:setState(state)
  81.   rs.setOutput(self.side, not state)
  82.   self.state = state
  83.   return true
  84. end
  85.  
  86. init()
Advertisement
Add Comment
Please, Sign In to add comment