From 60c0d4ea8c3ed62c8126d8ad5bf4a72cf8497907 Mon Sep 17 00:00:00 2001 From: Nick Overdijk Date: Sun, 29 Apr 2012 17:55:29 +0200 Subject: [PATCH] Woohoo chambers --- chamber.lua | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 chamber.lua diff --git a/chamber.lua b/chamber.lua new file mode 100644 index 0000000..656c6d5 --- /dev/null +++ b/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)) \ No newline at end of file