Example #1
0
			bool DoesTravelPathCollide(const Rectangle& rectangle, const glm::vec3& targetCenter, const Rectangle& obstacle)
			{
				const auto travelPathPolygon = TravelPathBounding::GetTravelPathBounding(rectangle, targetCenter);
				const std::vector<glm::vec3> obstacleVertices{ obstacle.A(), obstacle.B(), obstacle.C(), obstacle.D() };
				const bool doTheyOverlap = PolygonIntersection::DoPolygonsIntersect2D(travelPathPolygon, 
					obstacleVertices, VectorMath::PointType::OPEN_ENDED);
				return doTheyOverlap;
			}
Example #2
0
			std::vector<glm::vec3> GetTravelPathBounding(const Rectangle& rectangle, const glm::vec3& targetCenter)
			{
				const auto& currentCenter = rectangle.Center();
				std::vector<glm::vec3> vertices{ rectangle.A(), rectangle.B(), rectangle.C(), rectangle.D() };
				auto indices = GetSortedIndicesByDistanceFromPoint(vertices, targetCenter);

				const glm::vec3 directionVector = targetCenter - currentCenter;

				std::vector<glm::vec3> travelPathBoundingRectangle;
				bool isBoundingPathRectangle = IsBoundingPathRectangle(vertices, directionVector);
				if (isBoundingPathRectangle)
				{
					travelPathBoundingRectangle = GetBoundingPathAsRectangle(vertices, indices, directionVector);
				}
				else
				{
					travelPathBoundingRectangle = GetBoundingPathAsHexagon(vertices, indices, directionVector);
				}

				return travelPathBoundingRectangle;
			}