Advertisement
sanderronde

controller.lua

Jan 3rd, 2019
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.72 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.setCursorPos(1,5)
  35.     screen.write(40 - current_time .. "m")
  36.  
  37.     screen.setCursorPos(1,7)
  38.     screen.write("[")
  39.  
  40.     -- Can fit 15 |'s in a single line
  41.     local lines = (current_time / 40) * 15
  42.     for c = 0, lines do
  43.         screen.write("|")
  44.     end
  45.     for c = 0, 15 - lines do
  46.         screen.write(" ")
  47.     end
  48.  
  49.     screen.write("]")
  50. end
  51.  
  52. local function handleMessage(msg)
  53.     print("Got message ", msg)
  54.     if msg == "has_fuel" then
  55.         has_fuel = true
  56.     elseif msg == "has_no_fuel" then
  57.         has_fuel = false
  58.     elseif msg == "performing_task" then
  59.         busy = true
  60.     elseif msg == "done_task" then
  61.         busy = false
  62.     elseif msg == "ready" then
  63.         ready = true
  64.     end
  65.     update_screen()
  66. end
  67.  
  68. local function check_state()
  69.     local id, msg = rednet.receive(1)
  70.     if not id then
  71.         return
  72.     end
  73.     if id == INTERPRETER then
  74.         handleMessage(msg)
  75.     end
  76. end
  77.  
  78. local function freeze_while_waiting()
  79.     print("Freezing")
  80.     while not has_fuel or busy or not ready do
  81.         check_state()
  82.     end
  83.     print("Not freezing anymore")
  84. end
  85.  
  86. local function start_farm()
  87.     redstone.setOutput("back", true)
  88.     sleep(60)
  89.     redstone.setOutput("back", false)
  90.     sleep(30)
  91.     redstone.setOutput("left", true)
  92.     sleep(10)
  93.     redstone.setOutput("left", false)
  94.  
  95.     rednet.send(INTERPRETER, "farm")
  96. end
  97.  
  98. local function iterate()
  99.     while true do
  100.         update_screen()
  101.         freeze_while_waiting()
  102.  
  103.         print("Starting time")
  104.  
  105.         -- 40 minutes, time to fully grow a crop
  106.         for t = 0, 8 do
  107.             -- 5 minutes
  108.             for f = 0, 5 do
  109.                 -- 1 minute
  110.                 print("mins")
  111.                 for s = 0, 60 do
  112.                     check_state()
  113.                 end
  114.                 print("mine")
  115.  
  116.                 current_time = current_time + 1
  117.                 update_screen()
  118.             end
  119.  
  120.             freeze_while_waiting()
  121.             -- Make bread
  122.             rednet.send(INTERPRETER, "bake_bread")
  123.             current_task = "bake_bread"
  124.             busy = true
  125.             freeze_while_waiting()
  126.         end
  127.  
  128.         current_time = 0
  129.         update_screen()
  130.  
  131.         freeze_while_waiting()
  132.         -- Trigger flood and then replant crops
  133.         start_farm()
  134.         current_task = "farm"
  135.         busy = true
  136.         freeze_while_waiting()
  137.     end
  138. end
  139.  
  140. local function init()
  141.     rednet.open("top")
  142.     iterate()
  143. end
  144.  
  145. init()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement