Advertisement
chaos511

reactor_control.lua

Feb 18th, 2020
614
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.16 KB | None | 0 0
  1. -- https://pastebin.com/qqEuV9nj
  2. -- made by chaos511
  3.  
  4. local controlRodLevel=100
  5. local lastEnergyStored=0;
  6. local ki=100
  7. local kd=10000
  8. local lasttime=0;
  9. function formatstr(instr)
  10.     if math.abs(tonumber(instr)) > 1000 then
  11.         instr=instr/1000
  12.         return tostring(math.floor(instr*100)/100).." k"
  13.     else
  14.         return tostring(math.floor(instr)).." "
  15.  
  16.     end
  17. end
  18.  
  19. function getcolor(inboolean)
  20.     if inboolean then
  21.         return colors.green
  22.     else
  23.         return colors.red
  24.     end
  25. end
  26. displayList={{},{}}
  27. displayListIndex=1;
  28. function displayStatus(name,value,color,mon,x,y)
  29.     displayList[displayListIndex]={
  30.         x1=x,
  31.         y1=y,
  32.         color1=colors.white,
  33.         write1=name,
  34.         color2=color,
  35.         write2=value
  36.     }
  37.     displayListIndex=displayListIndex+1
  38. end
  39.  
  40. function updatedisplay(mon)
  41.     for index, data in ipairs(displayList) do
  42.         mon.setCursorPos(data.x1,data.y1)
  43.         mon.setTextColor(data.color1)
  44.         mon.write(data.write1)
  45.         mon.setTextColor(data.color2)
  46.         mon.write(data.write2)
  47.     end
  48.     displayListIndex=1;
  49. end
  50.  
  51. while true do  
  52.     local reactor = peripheral.find("BigReactors-Reactor")
  53.     local monitor = peripheral.find("monitor")
  54.  
  55.  
  56.     local energyStored=reactor.getEnergyStored()
  57.     local deltaes=energyStored-lastEnergyStored
  58.     local deltatime=os.time()-lasttime
  59.     local energyPercent=math.floor(energyStored/100000)
  60.     controlRodLevel=math.max(0, math.min(100, controlRodLevel+ (energyPercent-50)/ki) +(deltaes/kd))
  61.    
  62.     if energyPercent <2 then
  63.         controlRodLevel=0
  64.     end
  65.     if energyPercent > 98 then
  66.         controlRodLevel=100
  67.     end
  68.  
  69.     displayStatus("Active: ",reactor.getActive(),getcolor(reactor.getActive()),monitor,1,1)
  70.     displayStatus("Energy Stored: ",formatstr(energyStored).."Rf "..energyPercent.."%",getcolor(energyPercent>0),monitor,1,2)
  71.     displayStatus("Delta ES: ",formatstr(deltaes/(deltatime*1000)).."Rf/t",getcolor(deltaes>0),monitor,1,3)
  72.     displayStatus("Producing: ",formatstr(reactor.getEnergyProducedLastTick()).."Rf/t "..tostring(math.floor((100-controlRodLevel)*100)/100).."%",colors.green,monitor,1,4)
  73.     monitor.clear()
  74.     updatedisplay(monitor)
  75.    
  76.     lastEnergyStored=energyStored
  77.     lasttime=os.time()
  78.     reactor.setAllControlRodLevels(math.floor(controlRodLevel))
  79.     sleep(1)
  80.  
  81.  
  82. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement