Advertisement
sanderronde

controller.lua

Jan 3rd, 2019
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.46 KB | None | 0 0
  1. local INTERPRETER = 18
  2. local has_fuel = true
  3. local busy = false
  4. local ready = false
  5. local current_time = 0
  6. local current_task = nil
  7.  
  8. local screen = peripheral.wrap("front")
  9.  
  10. local function update_screen()
  11.     screen.clear()
  12.     screen.setTextScale(1.5)
  13.  
  14.     screen.setCursorPos(1,1)
  15.     screen.write("State:")
  16.  
  17.     screen.setCursorPos(1,2)
  18.     if not ready then
  19.         screen.write("Initting")
  20.     elseif not has_fuel then
  21.         screen.write("NO FUEL")
  22.     elseif busy then
  23.         if current_task == "bake_bread" then
  24.             screen.write("Baking bread")
  25.         else
  26.             screen.write("Planting crops")
  27.         end
  28.     else
  29.         screen.write("Growing")
  30.     end
  31.  
  32.     screen.setCursorPos(1,4)
  33.     screen.write("Time until harvest:")
  34.     screen.write(40 - current_time .. "m")
  35.  
  36.     screen.setCursorPos(1,5)
  37.     screen.write("[")
  38.  
  39.     -- Can fit 27 |'s in a single line
  40.     for c = 0, (current_time / 40) * 27 do
  41.         screen.write("|")
  42.     end
  43.  
  44.     screen.write("]")
  45. end
  46.  
  47. local function handleMessage(msg)
  48.     if msg == "has_fuel" then
  49.         has_fuel = true
  50.     elseif msg == "has_no_fuel" then
  51.         has_fuel = false
  52.     elseif msg == "performing_task" then
  53.         busy = true
  54.     elseif msg == "done_task" then
  55.         busy = false
  56.     elseif msg == "ready" then
  57.         ready = true
  58.     end
  59.     update_screen()
  60. end
  61.  
  62. local function check_state()
  63.     local res = rednet.receive(1)
  64.     if not res then
  65.         return
  66.     end
  67.     local id, msg = res
  68.  
  69.     if id == INTERPRETER then
  70.         handleMessage(msg)
  71.     end
  72. end
  73.  
  74. local function freeze_while_waiting()
  75.     while has_fuel or busy or not ready do
  76.         check_state()
  77.     end
  78. end
  79.  
  80. local function start_farm()
  81.     redstone.setOutput("back", true)
  82.     sleep(60)
  83.     redstone.setOutput("back", false)
  84.     sleep(30)
  85.     redstone.setOutput("left", true)
  86.     sleep(10)
  87.     redstone.setOutput("left", false)
  88.  
  89.     rednet.send(INTERPRETER, "farm")
  90. end
  91.  
  92. local function iterate()
  93.     while true do
  94.         freeze_while_waiting()
  95.  
  96.         -- 40 minutes, time to fully grow a crop
  97.         for t = 0, 8 do
  98.             -- 5 minutes
  99.             for f = 0, 5 do
  100.                 -- 1 minute
  101.                 for s = 0, 60 do
  102.                     check_state()
  103.                 end
  104.  
  105.                 current_time = current_time + 1
  106.                 update_screen()
  107.             end
  108.  
  109.             freeze_while_waiting()
  110.             -- Make bread
  111.             rednet.send(INTERPRETER, "bake_bread")
  112.             current_task = "bake_bread"
  113.             busy = true
  114.             freeze_while_waiting()
  115.         end
  116.  
  117.         current_time = 0
  118.         update_screen()
  119.  
  120.         freeze_while_waiting()
  121.         -- Trigger flood and then replant crops
  122.         start_farm()
  123.         current_task = "farm"
  124.         busy = true
  125.         freeze_while_waiting()
  126.     end
  127. end
  128.  
  129. local function init()
  130.     rednet.open("right")
  131. end
  132.  
  133. init()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement