Someoneawesome78

ReactorMonitor.lua

Mar 26th, 2023 (edited)
867
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.96 KB | None | 0 0
  1.  
  2. local ReactorMonitor = {}
  3. local Status = {
  4.     IDLE = 0;
  5.     CHARGING = 1;
  6.     HIGH = 2;
  7. }
  8.  
  9. local function writeStatusToMonitor(monitor, state)
  10.     if state == Status.IDLE then
  11.         monitor.setTextColor(colors.red);
  12.         monitor.write("Idle");
  13.     elseif state == Status.CHARGING then
  14.         monitor.setTextColor(colors.lime);
  15.         monitor.write("Charging");
  16.     elseif state == Status.HIGH then
  17.         monitor.setTextColor(colors.orange);
  18.         monitor.write("High Power");
  19.     else
  20.         monitor.setTextColor(colors.magenta);
  21.         monitor.write("Error!");
  22.     end
  23. end
  24.  
  25. local function round(num, numDecimalPlaces)
  26.     local mult = 10^(numDecimalPlaces or 0)
  27.     return math.floor(num * mult + 0.5) / mult
  28. end
  29.  
  30. local function writeRodControl(monitor, reactor, optimal)
  31.     local numRods = reactor.getNumberOfControlRods();
  32.     for i = 0, numRods - 1 do
  33.         local rodLevel = reactor.getControlRodLevel(i)
  34.         if rodLevel == optimal then
  35.             monitor.setTextColor(colors.lightBlue);
  36.         elseif rodLevel < optimal then
  37.             monitor.setTextColor(colors.orange);
  38.         else
  39.             monitor.setTextColor(colors.magenta);
  40.         end
  41.         monitor.write(tostring(rodLevel));
  42.         monitor.write(" ")
  43.     end
  44. end
  45.  
  46.  
  47. --Display format--
  48. --Reactor Monitoring System
  49. --Refresh: {} sec
  50. --State: {}
  51. --Time In State: {} sec
  52. --Prev State: {}
  53. --Time In Prev State: {} sec
  54. --Energy Level: {}%
  55. --Energy Produced: {} RF/t
  56. --Fuel Consumed: {} mb/t
  57. --Rod Control: [{}, {}, ...]
  58.  
  59. function ReactorMonitor.updateMonitor(config, state)
  60.     local currentLineNumber = 0;
  61.     local monitor = config.monitor;
  62.     local reactor = config.reactor;
  63.  
  64.     --reset
  65.     monitor.clear();
  66.     monitor.setTextScale(0.5);
  67.  
  68.     --First Line
  69.     currentLineNumber = currentLineNumber + 1;
  70.     monitor.setCursorPos(1,currentLineNumber);
  71.    
  72.     monitor.setTextColor(colors.orange);
  73.     monitor.write("Reactor Monitoring System");
  74.  
  75.     --Refresh: {} sec
  76.     currentLineNumber = currentLineNumber + 1;
  77.     monitor.setCursorPos(1,currentLineNumber);
  78.  
  79.     monitor.setTextColor(colors.white);
  80.     monitor.write("Refresh: ");
  81.     monitor.setTextColor(colors.yellow);
  82.     monitor.write(tostring(state.PrevSleepTime));
  83.     monitor.write(" sec");
  84.  
  85.     --State: {}
  86.     currentLineNumber = currentLineNumber + 1;
  87.     monitor.setCursorPos(1,currentLineNumber);
  88.  
  89.     monitor.setTextColor(colors.white);
  90.     monitor.write("State: ");
  91.  
  92.     writeStatusToMonitor(monitor, state.CurrentSystemStatus);
  93.  
  94.     --Time In State: {} sec
  95.     currentLineNumber = currentLineNumber + 1;
  96.     monitor.setCursorPos(1,currentLineNumber);
  97.  
  98.     monitor.setTextColor(colors.white);
  99.     monitor.write("Time In State: ");
  100.     monitor.setTextColor(colors.yellow);
  101.     monitor.write(tostring(os.clock() - state.CurrentSystemStatusStart));
  102.     monitor.write(" sec");
  103.  
  104.     --Prev State: {}
  105.     currentLineNumber = currentLineNumber + 1;
  106.     monitor.setCursorPos(1,currentLineNumber);
  107.  
  108.     monitor.setTextColor(colors.white);
  109.     monitor.write("Prev State: ");
  110.  
  111.     writeStatusToMonitor(monitor, state.PrevSystemStatus);
  112.  
  113.     --Time In Prev State: {} sec
  114.     currentLineNumber = currentLineNumber + 1;
  115.     monitor.setCursorPos(1,currentLineNumber);
  116.  
  117.     monitor.setTextColor(colors.white);
  118.     monitor.write("Time In Prev State: ");
  119.     monitor.setTextColor(colors.yellow);
  120.     monitor.write(tostring(state.PrevSystemStatusEnd - state.PrevSystemStatusStart));
  121.     monitor.write(" sec");
  122.  
  123.     --Energy Level: {}%
  124.     currentLineNumber = currentLineNumber + 1;
  125.     monitor.setCursorPos(1,currentLineNumber);
  126.  
  127.     monitor.setTextColor(colors.white);
  128.     monitor.write("Energy Level: ");
  129.     monitor.setTextColor(colors.yellow);
  130.     monitor.write(tostring(round(state.PrevEnergyLevel, 1)));
  131.     monitor.write("%");
  132.  
  133.     --Energy Produced: {} RF/t
  134.     currentLineNumber = currentLineNumber + 1;
  135.     monitor.setCursorPos(1,currentLineNumber);
  136.  
  137.     monitor.setTextColor(colors.white);
  138.     monitor.write("Energy Produced: ");
  139.     monitor.setTextColor(colors.yellow);
  140.     monitor.write(tostring(round(reactor.getEnergyProducedLastTick(), 1)));
  141.     monitor.write(" RF/t");
  142.  
  143.     --Fuel Consumed: {} mb/t
  144.     currentLineNumber = currentLineNumber + 1;
  145.     monitor.setCursorPos(1,currentLineNumber);
  146.  
  147.     monitor.setTextColor(colors.white);
  148.     monitor.write("Fuel Consumed: ");
  149.     monitor.setTextColor(colors.yellow);
  150.     monitor.write(tostring(round(reactor.getFuelConsumedLastTick(), 1)));
  151.     monitor.write(" mb/t");
  152.  
  153.     --Rod Control: [{}, {}, ...]
  154.     currentLineNumber = currentLineNumber + 1;
  155.     monitor.setCursorPos(1,currentLineNumber);
  156.  
  157.     monitor.setTextColor(colors.white);
  158.     monitor.write("Rod Control: ");
  159.     monitor.setTextColor(colors.yellow);
  160.     monitor.write("[ ");
  161.     writeRodControl(monitor, reactor, config.optimalInsertionPercent);
  162.     monitor.setTextColor(colors.yellow);
  163.     monitor.write("]");
  164. end
  165.  
  166. return ReactorMonitor;
Advertisement
Add Comment
Please, Sign In to add comment