Began work on moving to destination.
This commit is contained in:
parent
57b36d0941
commit
bcf30e259d
@ -16,7 +16,7 @@ local MOVETO = "moveto"
|
||||
local STATUS = "status"
|
||||
local POSITION = "position"
|
||||
local HEADING = "heading"
|
||||
local QUARRY = "quarry"
|
||||
local QUARRYCHUNK = "quarry"
|
||||
local TASK = "task"
|
||||
local FAILED = "failed"
|
||||
-- Constant messsage types
|
||||
@ -84,7 +84,7 @@ local function listenForCommands()
|
||||
sendDirective(LEADER, POSITION)
|
||||
elseif string.find(input, HEADING) == 1 then
|
||||
sendDirective(LEADER, HEADING)
|
||||
elseif string.find(input, QUARRY) == 1 then
|
||||
elseif string.find(input, QUARRYCHUNK) == 1 then
|
||||
sendDirective(LEADER, input)
|
||||
end
|
||||
end
|
||||
|
@ -12,7 +12,7 @@ local MOVETO = "moveto"
|
||||
local STATUS = "status"
|
||||
local POSITION = "position"
|
||||
local HEADING = "heading"
|
||||
local QUARRY = "quarry"
|
||||
local QUARRYCHUNK = "quarry"
|
||||
local TASK = "task"
|
||||
local FAILED = "failed"
|
||||
-- Constant messaging
|
||||
@ -21,6 +21,9 @@ local REQUEST = "REQ"
|
||||
-- Constant requests
|
||||
local BLOCKED = "blocked"
|
||||
local ITEM = "item"
|
||||
-- avoid breaking pattern
|
||||
local notPattern = "^allthemodium"
|
||||
|
||||
|
||||
-- INIT SEQUENCE
|
||||
print("Initiating leader mining turtle.")
|
||||
@ -134,6 +137,17 @@ local function attemptMove(movef)
|
||||
return true
|
||||
end
|
||||
|
||||
local function attemptBreak(breakf, inspectf, notPattern)
|
||||
local exists, data = inspectf()
|
||||
if not exists then
|
||||
return false
|
||||
end
|
||||
if string.match(data.name, pattern) then
|
||||
return false
|
||||
end
|
||||
breakf()
|
||||
end
|
||||
|
||||
local function locatePosition()
|
||||
local x, y, z = gps.locate()
|
||||
if x == nil then return false end
|
||||
@ -163,7 +177,7 @@ local function attemptMoveForward()
|
||||
if attemptMove(turtle.forward) then
|
||||
relativePos = relativePos + relHeading
|
||||
if (position ~= nil) then
|
||||
if ( heading ~= nil and heading:length() ~= 0) then
|
||||
if ( heading ~= nil ) then
|
||||
position = position + heading
|
||||
else
|
||||
locatePosition()
|
||||
@ -178,7 +192,7 @@ local function attemptMoveBackward()
|
||||
if attemptMove(turtle.back) then
|
||||
relativePos = relativePos - relHeading
|
||||
if (position ~= nil) then
|
||||
if (heading ~= nil and heading:length() ~= 0) then
|
||||
if (heading ~= nil) then
|
||||
position = position - heading
|
||||
else
|
||||
locatePosition()
|
||||
@ -195,7 +209,7 @@ local function attemptMoveLeft()
|
||||
relHeading = -relRightAxis
|
||||
relRightAxis = previousHeading
|
||||
|
||||
if heading ~= nil and heading:length() ~= 0 then
|
||||
if heading ~= nil then
|
||||
local previousHeading = heading
|
||||
heading = -rightAxis
|
||||
rightAxis = previousHeading
|
||||
@ -211,7 +225,7 @@ local function attemptMoveRight()
|
||||
relHeading = relRightAxis
|
||||
relRightAxis = -previousHeading
|
||||
|
||||
if heading ~= nil and heading:length() ~= 0 then
|
||||
if heading ~= nil then
|
||||
local previousHeading = heading
|
||||
heading = rightAxis
|
||||
rightAxis = -previousHeading
|
||||
@ -221,6 +235,18 @@ local function attemptMoveRight()
|
||||
return true
|
||||
end
|
||||
|
||||
local function attemptBreakUp(notPattern)
|
||||
return attemptBreak(turtle.digUp, turtle.inspectUp, notPattern);
|
||||
end
|
||||
|
||||
local function attemptBreakFront(notPattern)
|
||||
return attemptBreak(turtle.dig, turtle.inspect, notPattern)
|
||||
end
|
||||
|
||||
local function attemptBreakDown(notPattern)
|
||||
return attemptBreak(turtle.digDown, turtle.inspectDown, notPattern)
|
||||
end
|
||||
|
||||
local function orient(v, forward, right)
|
||||
print("Attempting to orient such that " .. tostring(v) .. " == " .. tostring(forward) .. ".")
|
||||
if vectorEqual(v, forward) then
|
||||
@ -329,6 +355,44 @@ local function moveBy(delta, forward, right)
|
||||
end
|
||||
end
|
||||
|
||||
local function moveTo(dest, range)
|
||||
sendLog(MOVETO, "Attempting to move by (" .. dest.x .. "," .. dest.y .. "," .. dest.z .. ") (x,y,z).")
|
||||
if position == nil or heading == nil then
|
||||
sendLog(FAILED, "Position or heading is invalid.")
|
||||
end
|
||||
local xBlocked, yBlocked, zBlocked = false, false, false
|
||||
local oldPos = nil
|
||||
while not vectorEqual(dest, position) do
|
||||
if vectorEqual(oldPos, position) then
|
||||
sendLog(FAILED, "Cannot proceed to due obstacle.")
|
||||
return
|
||||
end
|
||||
oldPos = vector.new(position.x, position.y, position.z);
|
||||
if position.x ~= dest.x then
|
||||
if not orient(vector.new(dest.x - position.x, 0, 0), heading, rightAxis) then
|
||||
sendLog(FAILED, "Unable to orient for X axis.")
|
||||
return
|
||||
end
|
||||
attemptMoveForward()
|
||||
end
|
||||
if position.y ~= dest.y then
|
||||
if dest.y - position.y > 0 then
|
||||
attemptMoveUp()
|
||||
else
|
||||
attemptMoveDown()
|
||||
end
|
||||
end
|
||||
if position.z ~= dest.z then
|
||||
if not orient(vector.new(0, 0, dest.z - position.z), heading, rightAxis) then
|
||||
sendLog(FAILED, "Unable to orient for Z axis.")
|
||||
return
|
||||
end
|
||||
attemptMoveForward()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function quarry(a, b)
|
||||
sendLog(QUARRY, "Starting quarry task from positions " .. tostring(a) .. " to " .. tostring(b) ".")
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user