Lua scripts for the computercraft mod for minecraft
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

107 lines
2.4 KiB

13 years ago
-- 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))