Woohoo chambers
This commit is contained in:
parent
4d7132d681
commit
60c0d4ea8c
1 changed files with 107 additions and 0 deletions
107
chamber.lua
Normal file
107
chamber.lua
Normal file
|
@ -0,0 +1,107 @@
|
|||
-- local turtle = {}
|
||||
-- local function placeholder() return true end
|
||||
-- turtle.up = placeholder
|
||||
-- turtle.down = placeholder
|
||||
-- turtle.digUp = placeholder
|
||||
-- turtle.digDown = placeholder
|
||||
-- turtle.dig = placeholder
|
||||
-- turtle.forward = placeholder
|
||||
-- turtle.turnLeft = placeholder
|
||||
-- turtle.turnRight = placeholder
|
||||
|
||||
local tArgs = { ... }
|
||||
|
||||
local height = tonumber(tArgs[1])
|
||||
local width = tonumber(tArgs[2])
|
||||
local length = tonumber(tArgs[3])
|
||||
|
||||
print("Will create chamber of "..height.."x"..width.."x"..length)
|
||||
|
||||
local verbose = true
|
||||
-- x, y
|
||||
local difference = {0, 0}
|
||||
|
||||
local function up()
|
||||
local success = turtle.up()
|
||||
if success then
|
||||
difference[2] = difference[2] + 1;
|
||||
end
|
||||
|
||||
return success
|
||||
end
|
||||
|
||||
local function down()
|
||||
local success = turtle.down()
|
||||
if success then
|
||||
difference[2] = difference[2] - 1;
|
||||
end
|
||||
|
||||
return success
|
||||
end
|
||||
|
||||
local function fup()
|
||||
while not up() do turtle.digUp() end
|
||||
end
|
||||
|
||||
local function fdown()
|
||||
while not down() do turtle.digDown() end
|
||||
end
|
||||
|
||||
local function fdig()
|
||||
while turtle.detect() do turtle.dig() end
|
||||
end
|
||||
|
||||
local function fforward()
|
||||
while not turtle.forward() do turtle.dig() end
|
||||
end
|
||||
|
||||
-- direction = 0 -> up
|
||||
-- direction = 1 -> down
|
||||
local function dig(height, direction)
|
||||
local df = nil
|
||||
if direction == 0 then df = fup else df = fdown end
|
||||
for h = 2,height do
|
||||
df()
|
||||
end
|
||||
end
|
||||
|
||||
-- Digs a hall
|
||||
-- height height of the hall
|
||||
-- length length of the hall
|
||||
-- starting_direction 0 start going up, 1 start going down
|
||||
local function hall(height, length, starting_direction)
|
||||
local direction = starting_direction
|
||||
for l = 1,length do
|
||||
dig(height, direction)
|
||||
if direction == 0 then direction = 1 else direction = 0 end
|
||||
if l < length then fforward() end
|
||||
end
|
||||
|
||||
return direction
|
||||
end
|
||||
|
||||
local function repeate(number, f)
|
||||
for i = 2,number do f() end
|
||||
end
|
||||
|
||||
-- Creates a chamber where he stands, starts at the bottom, rotates to the right
|
||||
-- height height of the chamber
|
||||
-- width width of the chamber
|
||||
-- length length of the chamber
|
||||
local function chamber(height, width, length)
|
||||
local location = 0 -- 0 == "should go up"
|
||||
local rotation = 0 -- 0 == "should turn left"
|
||||
for w = 1,width do
|
||||
location = hall(height, length, location)
|
||||
local rf = nil
|
||||
if rotation == 0 then rf = turtle.turnLeft; rotation = 1 else rf = turtle.turnRight; rotation = 0 end
|
||||
rf()
|
||||
if w < width then fforward() end
|
||||
rf()
|
||||
end
|
||||
|
||||
if location == 1 then repeate(height, down) end
|
||||
end
|
||||
|
||||
chamber(height, width, length)
|
||||
print("Ended at difference of " .. tostring(difference))
|
Reference in a new issue