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; }
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; }