--#!lua
-- Copyright (c) Odd Strabo <oddstr13@openshell.no>
-- License: MIT

local function goForward(n)
  if n == nil then n = 1 end
  for i=1,n do
    while not turtle.forward() do
      sleep(0.4)
    end
  end
end

local function mineForward(n)
  if n == nil then n = 1 end
  for i=1,n do
    while not turtle.forward() do
      turtle.dig()
    end
  end
end

local function mineUp(n)
  if n == nil then n = 1 end
  for i=1,n do
    while not turtle.up() do
      turtle.digUp()
    end
  end
end

local function mineFloor()
  local floorsize = {}
  floorsize.x = 16 -- Depth (forward)
  floorsize.y = floorsize.x -- Width (right)
  local floorheight = 5
  
  local doublemine = math.floor(floorheight / 2)
  local singlemine = floorheight - (doublemine*2)
  
  local movesperfloor = floorsize.x * floorsize.y
  local fuelneeded = ((movesperfloor + 2) * doublemine) + ((movesperfloor + 1) * singlemine)
  
  local fuellevel = turtle.getFuelLevel()
  if fuellevel < fuelneeded then
    print("Need ", fuelneeded - fuellevel, " more fuel to compleete the operation.")
    error()
  end
  
  local tr = true -- Turn right?
  for n=1,doublemine do
    for y=1,floorsize.y do
      for x=1,floorsize.x-1 do
        turtle.digUp()
        mineForward(1)
      end
      turtle.digUp()
      if floorsize.y ~= y then
        if tr then
          turtle.turnRight()
          mineForward(1)
          turtle.turnRight()
        else
          turtle.turnLeft()
          mineForward(1)
          turtle.turnLeft()
        end
        tr = not tr
      end
    end
    if n ~= doublemine or singlemine ~= 0 then
      mineUp(2)
      turtle.turnRight()
      turtle.turnRight()
    end
  end
  for n=1,singlemine do
    for y=1,floorsize.y do
      for x=1,floorsize.x-1 do
        mineForward(1)
      end
      if floorsize.y ~= y then
        if tr then
          turtle.turnRight()
          mineForward(1)
          turtle.turnRight()
        else
          turtle.turnLeft()
          mineForward(1)
          turtle.turnLeft()
        end
        tr = not tr
      end
    end
    if n ~= singlemine then
      mineUp(1)
      turtle.turnRight()
      turtle.turnRight()
    end
  end
  
end


mineFloor()
