Browse Source

Woohoo chambers

master
Nick Overdijk 13 years ago
parent
commit
60c0d4ea8c
  1. 107
      chamber.lua

107
chamber.lua

@ -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))