diff --git a/Modules/fcircles.lua b/Modules/fcircles.lua new file mode 100644 index 0000000..dc2e9f5 --- /dev/null +++ b/Modules/fcircles.lua @@ -0,0 +1,784 @@ +--[[ Modules for generation or building circles in various forms +--filled with another sort of block - written by TheLux +--Check https://i.redd.it/swn3e9w8dyc31.jpg to see +--the references for the numbers]] + +-- Check if the modules API is present +-- and load it. We need it +if not os.loadAPI('modules.lua') then + error('Error! modules.lua is missing. Please insert it into turtle.') +end + +--initial_circle_setup() checks if there is enough +--material and sets the turtle to the start +--position. +--All circles uses this function +--omaterial = Outer Material +--imaterial = Inner Material +function initial_circle_setup(omaterial, imaterial, omaterial_count, imaterial_count) + -- Check if we have enough material + if modules.count_inventory(omaterial) < omaterial_count then + print('Error! Not enough blocks of ' .. omaterial) + return false + end + + if modules.count_inventory(imaterial) < imaterial_count then + print('Error! Not enough blocks of ' .. imaterial) + return false + end + + turtle.up() +end + +-- go_to_start() brings the turtle back to the starting point +function go_to_start(moving_forward, diameter) + if moving_forward then + -- turtle is on the left position + for i = 1, finished_left do + turtle.forward() + end + turtle.turnLeft() + else + -- turtle is on the right position + for i = 1, finished_right do + turtle.back() + end + turtle.turnLeft() + end + + for i = 1, diameter do + turtle.back() + end + + +--circle3 builds a 3 by 3 wide circle +function circle3(omaterial, imaterial) + -- Definition of the diameter of the circle + local diameter = 3 + local moving_forward = true + + -- Define the blocks you have to go from left and right, + -- when building is finished, to go back to start + local finished_left = 0 + local finished_right = 2 + + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(omaterial, imaterial, 8, 1) + + turtle.turnLeft() + for i = 1, diameter do + modules.select_and_place_down(material) + for j = 1, diameter -1 do + if moving_forward then + turtle.forward() + elseif not moving_forward then + turtle.back() + modules.select_and_place_down(material) + end + turtle.turnLeft() + turtle.forward() + turtle.turnRight() + moving_forward = not moving_forward + + -- Done building, go back to start + go_to_start(moving_forward, diameter) + end + print('Done building a filled 3 by 3 circle') +end + + +--circle4 builds a 4 by 4 wide circle +function circle4(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 8) + turtle.turnLeft() + turtle.forward() + turtle.turnRight() + for i = 1, 3 do + for j = 1, 2 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + turtle.turnRight() + end + turtle.forward() + modules.select_and_place_down(material) + turtle.forward() + modules.select_and_place_down(material) + turtle.turnRight() + print('Done building a 4 by 4 circle') +end + + +--circle5 builds a 5 by 5 wide circle +function circle5(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 12) + turtle.turnLeft() + turtle.forward() + turtle.turnRight() + for i = 1, 3 do + for j = 1, 3 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + turtle.turnRight() + end + + for i = 1, 3 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.turnRight() + print('Done building a 5 by 5 circle') +end + + +--circle6 builds a 6 by 6 wide circle +function circle6(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 16) + turtle.turnLeft() + turtle.forward() + turtle.turnRight() + for i = 1, 3 do + for j = 1, 4 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + turtle.turnRight() + end + + for i = 1, 4 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.turnRight() + print('Done building a 4 by 4 circle') +end + + +--circle7 builds a 7 by 7 wide circle +function circle7(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 16) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + turtle.turnRight() + turtle.forward() + modules.select_and_place_down(material) + turtle.turnLeft() + turtle.forward() + turtle.turnRight() + for j = 1, 3 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 7 by 7 circle') +end + + +--circle8 builds a 8 by 8 wide circle +function circle8(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 20) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + turtle.turnRight() + turtle.forward() + modules.select_and_place_down(material) + turtle.turnLeft() + turtle.forward() + turtle.turnRight() + for j = 1, 4 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 8 by 8 circle') +end + + +--circle9 builds a 9 by 9 wide circle +function circle9(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 24) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + turtle.turnRight() + turtle.forward() + modules.select_and_place_down(material) + turtle.turnLeft() + turtle.forward() + turtle.turnRight() + for j = 1, 5 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 9 by 9 circle') +end + + +--circle10 builds a 10 by 10 wide circle +function circle10(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 28) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_triangle(material) + turtle.turnRight() + for j = 1, 4 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 10 by 10 circle') +end + + +--circle11 builds a 11 by 11 wide circle +function circle11(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 28) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 5 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 11 by 11 circle') +end + + +--circle12 builds a 12 by 12 wide circle +function circle12(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 32) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(2, material) + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 4 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 12 by 12 circle') +end + + +--circle13 builds a 13 by 13 wide circle +function circle13(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 36) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(2, material) + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 5 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 13 by 13 circle') +end + + +--circle14 builds a 14 by 14 wide circle +function circle14(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 36) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_diagonal(3, material) + turtle.turnRight() + for j = 1, 6 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 14 by 14 circle') +end + + +--circle15 builds a 15 by 15 wide circle +function circle15(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 36) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(2, material) + circles.place_diagonal(1, material) + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 5 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 15 by 15 circle') +end + + +--circle16 builds a 16 by 16 wide circle +function circle16(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 44) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(2, material) + circles.place_diagonal(1, material) + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 6 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 16 by 16 circle') +end + + +--circle17 builds a 17 by 17 wide circle +function circle17(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 48) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(2, material) + circles.place_triangle(material) + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 5 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 17 by 17 circle') +end + + +--circle18 builds a 18 by 18 wide circle +function circle18(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 48) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(2, material) + circles.place_diagonal(2, material) + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 6 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 18 by 18 circle') +end + + +--circle19 builds a 19 by 19 wide circle +function circle19(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 52) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(2, material) + circles.place_diagonal(2, material) + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 7 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 19 by 19 circle') +end + + +--circle20 builds a 20 by 20 wide circle +function circle20(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 56) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(2, material) + circles.place_row(2, material) + circles.place_column(2, material) + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 6 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 20 by 20 circle') +end + + +--circle21 builds a 21 by 21 wide circle +function circle21(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 56) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(2, material) + circles.place_diagonal(3, material) + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 7 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 21 by 21 circle') +end + + +--circle22 builds a 22 by 22 wide circle +function circle22(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 60) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(3, material) + circles.place_diagonal(3, material) + circles.place_column(3, material) + turtle.turnRight() + for j = 1, 6 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 22 by 22 circle') +end + + +--circle23 builds a 23 by 23 wide circle +function circle23(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 64) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(2, material) + circles.place_row(2, material) + circles.place_diagonal(1, material) + circles.place_column(2, material) + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 7 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 23 by 23 circle') +end + + +--circle24 builds a 24 by 24 wide circle +function circle24(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 64) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(3, material) + circles.place_diagonal(4, material) + circles.place_column(3, material) + turtle.turnRight() + for j = 1, 6 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 24 by 24 circle') +end + + +--circle25 builds a 25 by 25 wide circle +function circle25(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 68) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(2, material) + circles.place_row(2, material) + circles.place_diagonal(2, material) + circles.place_column(2, material) + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 7 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 25 by 25 circle') +end + + +--circle26 builds a 26 by 26 wide circle +function circle26(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 72) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(2, material) + circles.place_row(2, material) + circles.place_diagonal(2, material) + circles.place_column(2, material) + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 8 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 26 by 26 circle') +end + + +--circle27 builds a 27 by 27 wide circle +function circle27(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 76) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(3, material) + circles.place_diagonal(1, material) + circles.place_row(2, material) + circles.place_column(2, material) + circles.place_diagonal(1, material) + circles.place_column(3, material) + turtle.turnRight() + for j = 1, 7 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 27 by 27 circle') +end + + +--circle28 builds a 28 by 28 wide circle +function circle28(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 76) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(2, material) + circles.place_row(2, material) + circles.place_diagonal(3, material) + circles.place_column(2, material) + circles.place_column(2, material) + turtle.turnRight() + for j = 1, 7 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 28 by 28 circle') +end + + +--circle29 builds a 29 by 29 wide circle +function circle29(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 80) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(3, material) + circles.place_row(2, material) + circles.place_diagonal(3, material) + circles.place_column(2, material) + circles.place_column(3, material) + turtle.turnRight() + for j = 1, 7 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 29 by 29 circle') +end + + +--circle30 builds a 30 by 30 wide circle +function circle30(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 84) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(3, material) + circles.place_diagonal(1, material) + circles.place_row(2, material) + circles.place_diagonal(1, material) + circles.place_column(2, material) + circles.place_diagonal(1, material) + circles.place_column(3, material) + turtle.turnRight() + for j = 1, 8 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 30 by 30 circle') +end + + +--circle31 builds a 31 by 31 wide circle +function circle31(material) + -- Start the initial Setup and place the turtle in + -- the right position + circles.initial_circle_setup(material, 84) + turtle.turnLeft() + turtle.forward() + for i = 1, 4 do + circles.place_row(3, material) + circles.place_row(2, material) + circles.place_diagonal(4, material) + circles.place_column(2, material) + circles.place_column(3, material) + turtle.turnRight() + for j = 1, 7 do + turtle.forward() + modules.select_and_place_down(material) + end + turtle.forward() + end + turtle.back() + turtle.turnRight() + print('Done building a 31 by 31 circle') +end +