49bfd155e2
hare.lua contains now everything from Al Sweigarts book and modules is my interpretation from it with a few tweaks. Additionally I've created a circles.lua module. This module is used to build circles referenced from https://i.redd.it/swn3e9w8dyc31.jpg
129 lines
2.9 KiB
Lua
129 lines
2.9 KiB
Lua
--[[Function Module program by Al Sweigart
|
|
Provides useful utility functions.]]
|
|
|
|
-- selectItem() selects the inventory
|
|
-- slot with the named item, returns
|
|
-- true if found and false if not
|
|
function selectItem(name)
|
|
-- check all inventory slots
|
|
local item
|
|
for slot = 1, 16 do
|
|
item = turtle.getItemDetail(slot)
|
|
if item ~= nil and item['name'] == name then
|
|
turtle.select(slot)
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false -- couldn't find item
|
|
end
|
|
|
|
|
|
-- selectEmptySlot() selects inventory
|
|
-- slot that is empty, returns true if
|
|
-- found, false if no empty spaces
|
|
function selectEmptySlot()
|
|
|
|
-- loop through all slots
|
|
for slot = 1, 16 do
|
|
if turtle.getItemCount(slot) == 0 then
|
|
turtle.select(slot)
|
|
return true
|
|
end
|
|
end
|
|
return false -- couldn't find empty space
|
|
end
|
|
|
|
-- countInventory() returns the total
|
|
-- numer of items in the inventory
|
|
function countInventory()
|
|
local total = 0
|
|
|
|
for slot = 1, 16 do
|
|
total = total + turtle.getItem(slot)
|
|
end
|
|
return total
|
|
end
|
|
|
|
-- selectAndPlaceDown() selects a nonempty slot
|
|
-- and places a block from it under the turtle
|
|
function selectAndPlaceDown()
|
|
for slot = 1, 16 do
|
|
if turtle.getItemCount(slot) > 0 then
|
|
turtle.select(slot)
|
|
turtle.placeDown()
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-- buildWall() creates a wall stretching
|
|
-- in front of the turtle
|
|
function buildWall(length, height)
|
|
if modules.countInventory() > length * height then
|
|
return false --not enough block
|
|
end
|
|
|
|
turtle.up()
|
|
|
|
local movingForward = true
|
|
|
|
for currentHeight = 1, height do
|
|
for currentLength = 1, length do
|
|
selectAndPlaceDown() -- Place the block
|
|
if movingForward and currentLength ~= length then
|
|
turtle.forward()
|
|
elseif not movingForward and currentLength ~= length then
|
|
turtle.back()
|
|
end
|
|
end
|
|
if currentHeight ~= height then
|
|
turtle.up()
|
|
end
|
|
movingForward = not movingForward
|
|
end
|
|
|
|
-- done building wall; move to end position
|
|
if movingForward then
|
|
-- turtle is near the start position
|
|
for currentLength = 1, length do
|
|
turtle.forward()
|
|
end
|
|
else
|
|
-- turtle is near the end position
|
|
turtle.forward()
|
|
end
|
|
|
|
-- move down to the ground
|
|
for currentHeight = 1, height do
|
|
turtle.down()
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
-- buildRoom() constructs four walls
|
|
-- and a ceiling
|
|
function buildRoom(length, width, height)
|
|
if hare.countInventory() < (((length -1) * height * 2) +
|
|
((width -1) * height * 2)) then
|
|
return false -- not enough blocks
|
|
end
|
|
|
|
-- build the four walls
|
|
buildWall(length -1, height)
|
|
turtle.turnRight()
|
|
|
|
buildWall(width - 1, height)
|
|
turtle.turnRight()
|
|
|
|
buildWall(length - 1, height)
|
|
turtle.turnRight()
|
|
|
|
buildWall(width - 1, height)
|
|
turtle.turnRight()
|
|
|
|
return true
|
|
end
|