Advertisement
demon012

Minecraft-Computercraft-buildcraftEnergyController

Sep 9th, 2013
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.65 KB | None | 0 0
  1. EnergyController = {
  2.     cells = {},
  3.     modem = nil,
  4.     engineCompID = 90,
  5.     enginesOn = false,
  6.     minEnergy = 0,
  7.     maxEnergy = 0,
  8. }
  9. function EnergyController:findWirelessModem()
  10.     for _, side in pairs(rs.getSides()) do
  11.         if peripheral.getType(side) == "modem" then
  12.             self.modem = rednet.open(side)
  13.             return true
  14.         end
  15.     end
  16.  
  17.     return false
  18. end
  19. function EnergyController:powerOnEngines()
  20.     if not self.enginesOn then
  21.         print("Turning on engines")
  22.         self.enginesOn = true
  23.         rednet.send(self.engineCompID, "on")
  24.     end
  25. end
  26. function EnergyController:powerOffEngines()
  27.     if self.enginesOn then
  28.         print("Turning off engines")
  29.         self.enginesOn = false
  30.         rednet.send(self.engineCompID, "off")
  31.     end
  32. end
  33. function EnergyController:mainLoop()
  34.     while true do
  35.         event, param1, param2, param3 = os.pullEvent()
  36.         if event == 'rednet_message' then
  37.             if string.find(param2, "energyStored:") then
  38.                 local energy = tonumber(param2:sub(14))
  39.  
  40.                 if not self.cells[param1] then
  41.                     self.cells[param1] = energy
  42.                     local numCells = 0
  43.                     for _,_ in pairs(self.cells) do
  44.                         numCells = numCells + 1
  45.                     end
  46.                     self.minEnergy = (numCells * 600000) * 0.1
  47.                     self.maxEnergy = (numCells * 600000) * 0.9
  48.                 else
  49.                     self.cells[param1] = energy
  50.                 end
  51.  
  52.                 print(textutils.serialize(self.cells))
  53.  
  54.                 local totalEnergy = 0
  55.                 for cell, energy in pairs(self.cells) do
  56.                     totalEnergy = totalEnergy + energy
  57.                 end
  58.  
  59.                 if totalEnergy < self.minEnergy then
  60.                     self:powerOnEngines()
  61.                 elseif totalEnergy > self.maxEnergy then
  62.                     self:powerOffEngines()
  63.                 end
  64.             end
  65.         end
  66.     end
  67. end
  68.  
  69. ec = EnergyController
  70. ec:findWirelessModem()
  71. ec:mainLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement