Worked on heading stuff.
This commit is contained in:
		| @@ -134,6 +134,13 @@ local function attemptMove(movef) | ||||
| 	return true | ||||
| end | ||||
|  | ||||
| local function locatePosition() | ||||
| 	local x, y, z = gps.locate() | ||||
| 	if x == nil then return false end | ||||
| 	position = vector.new(x, y, z) | ||||
| 	return true | ||||
| end | ||||
|  | ||||
| local function attemptMoveUp() | ||||
| 	if attemptMove(turtle.up) then | ||||
| 		relativePos.y = relativePos.y + 1 | ||||
| @@ -155,8 +162,12 @@ end | ||||
| local function attemptMoveForward() | ||||
| 	if attemptMove(turtle.forward) then | ||||
| 		relativePos = relativePos + relHeading | ||||
| 		if (position ~= nil and heading ~= nil) then | ||||
| 		if (position ~= nil) then | ||||
| 			if ( heading ~= nil and heading:length() ~= 0) then | ||||
| 				position = position + heading | ||||
| 			else | ||||
| 				locatePosition() | ||||
| 			end | ||||
| 		end | ||||
| 		return true | ||||
| 	end | ||||
| @@ -166,8 +177,12 @@ end | ||||
| local function attemptMoveBackward() | ||||
| 	if attemptMove(turtle.back) then | ||||
| 		relativePos = relativePos - relHeading | ||||
| 		if (position ~= nil and heading ~= nil) then | ||||
| 		if (position ~= nil) then | ||||
| 			if (heading ~= nil and heading:length() ~= 0) then | ||||
| 				position = position - heading | ||||
| 			else | ||||
| 				locatePosition() | ||||
| 			end | ||||
| 		end | ||||
| 		return true | ||||
| 	end | ||||
| @@ -180,7 +195,7 @@ local function attemptMoveLeft() | ||||
| 		relHeading = -relRightAxis | ||||
| 		relRightAxis = previousHeading | ||||
| 		 | ||||
| 		if heading ~= nil then | ||||
| 		if heading ~= nil and heading:length() ~= 0 then | ||||
| 			local previousHeading = heading | ||||
| 			heading = -rightAxis | ||||
| 			rightAxis = previousHeading | ||||
| @@ -196,7 +211,7 @@ local function attemptMoveRight() | ||||
| 		relHeading = relRightAxis | ||||
| 		relRightAxis = -previousHeading | ||||
| 		 | ||||
| 		if heading ~= nil then | ||||
| 		if heading ~= nil and heading:length() ~= 0 then | ||||
| 			local previousHeading = heading | ||||
| 			heading = rightAxis | ||||
| 			rightAxis = -previousHeading | ||||
| @@ -231,20 +246,21 @@ local function attemptStartTask(name, f, ...) | ||||
| 	taskArgs = arg | ||||
| end | ||||
|  | ||||
| -- actions | ||||
|  | ||||
| local function locatePosition() | ||||
| 	sendLog(POSITION, "Using GPS to determine position.") | ||||
| 	local x, y, z = gps.locate() | ||||
| 	if x == nil then sendLog(POSITION, "could not locate.") end | ||||
| 	position = vector.new(x, y, z) | ||||
| -- Actions | ||||
|  | ||||
| local function determinePosition() | ||||
| 	if not locatePosition() then | ||||
| 		sendLog(FAILED, "Unable to obtain GPS based position.") | ||||
| 		return | ||||
| 	end | ||||
| 	sendLog(POSITION, "Position obtained: " .. tostring(position)) | ||||
| end | ||||
|  | ||||
| local function determineHeading() | ||||
| 	sendLog(HEADING, "Calculating heading.") | ||||
| 	if position == nil then | ||||
| 		sendLog(FAILED, "No current position") | ||||
| 	if position == nil && locatePosition() then | ||||
| 		sendLog(FAILED, "Unable to get current position.") | ||||
| 		return | ||||
| 	end | ||||
| 	local oldPos = vector.new(position.x, position.y, position.z) | ||||
| @@ -252,28 +268,34 @@ local function determineHeading() | ||||
| 		sendLog(FAILED, "Could not move to get delta.") | ||||
| 		return | ||||
| 	end | ||||
| 	if position == nil then  | ||||
| 		sendLog(FAILED, "Could not locate.") | ||||
| 		return | ||||
| 	end | ||||
| 	local fDelta = position - oldPos | ||||
| 	 | ||||
| 	if not attemptMoveBackward() then | ||||
| 		sendLog(FAILED, "Could not return to original position after first axis.") | ||||
| 		return | ||||
| 	end | ||||
|  | ||||
| 	if not attemptMoveRight() then | ||||
| 		sendLog(FAILED, "Unable to rotate right.") | ||||
| 		return | ||||
| 	end | ||||
| 	local oldPos = vector.new(position.x, position.y, position.z) | ||||
| 	 | ||||
| 	if not attemptMoveForward() then | ||||
| 		sendLog(FAILED, "Unable to move forward after rotation.") | ||||
| 		return | ||||
| 	end | ||||
| 	local rDelta = position - oldPos | ||||
| 	if not attemptMoveBackward() then | ||||
| 		sendLog(FAILED, "Could not return to original position after second  axis.") | ||||
| 		return | ||||
| 	end | ||||
| 	if not attemptMoveLeft() then | ||||
| 		sendLog(FAILED, "Unable to rotate left.") | ||||
| 		return | ||||
| 	end | ||||
|  | ||||
| 	heading = fDelta | ||||
| 	rightAxis = position - oldPos | ||||
| 	rightAxis = rDelta | ||||
| 	sendLog(HEADING, "Heading obtained. \nForward: " .. textutils.serialiseJSON(heading) .. "\nRight direction: " .. textutils.serialiseJSON(rightAxis)) | ||||
| end | ||||
|  | ||||
| @@ -389,7 +411,7 @@ local function listen() | ||||
| 								"\nfuel: " .. tostring(status["fuel"]) ..  | ||||
| 								"\ncurrent task: " .. status["task"], status) | ||||
| 			elseif data["request"] == POSITION then | ||||
| 				locatePosition() | ||||
| 				determinePosition() | ||||
| 			elseif data["request"] == HEADING then | ||||
| 				determineHeading() | ||||
| 			elseif data["request"] == QUARRY then | ||||
|   | ||||
		Reference in New Issue
	
	Block a user