Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ----------------------------------
- -- Warning ! WORK IN PROGRESS ! --
- -- Has not been fully tested ! --
- ----------------------------------
- --
- -- MigukNamja's 1st Rectangle Dig Program
- -- Copyright 2013 MigukNamja
- --
- -- Move forward 'blocks' number of blocks, digging when necessary
- -- Hitting bedrock or something undiggable like an entity (creature) will
- -- prevent forward movement
- --
- -- Return actual blocks moved forward
- function moveForward(blocks)
- if blocks < 0 then return moveBack(0-blocks) end
- if blocks == 0 then return 0 end
- local moved = 0
- while moved < blocks do
- if turtle.forward() then -- air, nothing to dig, but go down
- moved = moved + 1
- elseif turtle.dig() then -- had to dig to go forwards
- if not turtle.forward() then
- local attempts = 0
- while turtle.dig() and attempts < 20 do
- attempts = attempts + 1 -- take care water won't cause infinite digging
- sleep(0.25) -- might have to chew through a stack of sand or gravel
- end
- if turtle.forward() then
- moved = moved + 1
- end
- else
- moved = moved + 1
- end
- else -- undiggable, give up (for now)
- return moved
- end
- sleep(0.25) -- sleep to avoid yielding error
- end
- return moved
- end
- -- Move backwards, digging when necessary
- function moveBack(blocks)
- if blocks < 0 then return moveForward(0-blocks) end
- if blocks == 0 then return 0 end
- local moved = 0
- turtle.turnRight()
- turtle.turnRight()
- moved = moveForward(blocks)
- turtle.turnRight()
- turtle.turnRight()
- return moved
- end
- function usage()
- print( "Usage: rectangle <blocks_forward> <blocks_right>" )
- print( "Both values must be a least 1" )
- end
- function parseArgs(args)
- local validSyntax = false
- local bForward = 0
- local bRight = 0
- if #args ~= 2 then
- return false
- elseif args[1] == "help" then
- return false
- elseif args[1] == nil or args[2] == nil then
- return false
- else
- bForward = tonumber( args[1] )
- bRight = tonumber( args[2] )
- if bForward <= 0 or bRight <= 0 then
- validSyntax = false
- else
- validSyntax = true
- end
- end
- return validSyntax, bForward, bRight
- end
- local tArgs = { ... }
- validSyntax, bForward, bRight = parseArgs(tArgs)
- if not validSyntax then
- usage()
- return
- end
- print( "Digging ", bForward, " blocks forward and ", bRight, " blocks rightwards." )
- local i = 0
- while i < bRight do
- if i == 0 then -- The 1st row is different because turtle starts 1 block behind dig area
- -- Dig forward
- assert( moveForward( bForward ) == bForward )
- else -- All other rows
- -- Dig forward
- assert( moveForward( bForward-1 ) == bForward-1 )
- end
- -- Mark that row as done
- i = i + 1
- if i >= bRight then -- Done ?
- break
- else -- Turn and get ready for next row
- if i % 2 == 1 then -- Even rows, including the 0th row
- turtle.turnRight()
- assert( moveForward( 1 ) == 1 )
- turtle.turnRight()
- else -- Odd rows
- turtle.turnLeft()
- assert( moveForward( 1 ) == 1 )
- turtle.turnLeft()
- end
- end
- end
- print( "I have finished the assigned task, my master !" )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement