31 ConeIntersector(const Vec3f& startCenter, const Vec3f& endCenter,
KyFloat32 halfWidth,
KyFloat32 integerPrecision)
32 : m_integerPrecision(integerPrecision)
33 , m_startCenter(startCenter)
34 , m_endCenter(endCenter)
35 , m_halfWidth(halfWidth)
37 m_normalizedDir2d = m_endCenter.Get2d() - m_startCenter.Get2d();
38 m_length = m_normalizedDir2d.Normalize();
40 const Vec2f leftDir = m_normalizedDir2d.PerpCCW();
41 const Vec2f leftVec = m_halfWidth * leftDir;
42 m_endLeft = m_endCenter + leftVec;
43 m_endRight = m_endCenter - leftVec;
46 ConeIntersector(
const Vec3f& startPos,
const Vec2f& normalizedDir2d,
KyFloat32 length,
KyFloat32 halfWidth,
KyFloat32 integerPrecision)
47 : m_integerPrecision(integerPrecision)
48 , m_startCenter(startPos)
49 , m_normalizedDir2d(normalizedDir2d)
51 , m_halfWidth(halfWidth)
53 m_endCenter = m_startCenter + (m_normalizedDir2d * m_length);
55 const Vec2f leftDir = m_normalizedDir2d.PerpCCW();
56 const Vec2f leftVec = m_halfWidth * leftDir;
57 m_endLeft = m_endCenter + leftVec;
58 m_endRight = m_endCenter - leftVec;
63 const Vec3f startEdgePos(startEdgeCoordPos.x * m_integerPrecision, startEdgeCoordPos.y * m_integerPrecision, 0.f);
64 const Vec3f endEdgePos(endEdgeCoordPos.x * m_integerPrecision, endEdgeCoordPos.y * m_integerPrecision, 0.f);
66 return Math::IsSegmentVsTriangle2f(startEdgePos, endEdgePos, m_startCenter, m_endLeft, m_endRight);
69 void ComputeCollisionPosOnEdge(
const CoordPos64& startEdgeCoordPos,
const CoordPos64& endEdgeCoordPos, Vec3f& collisionPos,
KyFloat32& squareDistToCollisionPos)
71 const Vec3f startEdgePos(startEdgeCoordPos.x * m_integerPrecision, startEdgeCoordPos.y * m_integerPrecision, 0.f);
72 const Vec3f endEdgePos(endEdgeCoordPos.x * m_integerPrecision, endEdgeCoordPos.y * m_integerPrecision, 0.f);
74 ClosestPoint::OnSegmentVsConeCast2d(startEdgePos, endEdgePos, m_startCenter, m_normalizedDir2d, m_length, m_halfWidth, collisionPos, squareDistToCollisionPos);
79 const Vec3f v0(v0CoordPos.x * m_integerPrecision, v0CoordPos.y * m_integerPrecision, 0.f);
80 const Vec3f v1(v1CoordPos.x * m_integerPrecision, v1CoordPos.y * m_integerPrecision, 0.f);
81 const Vec3f v2(v2CoordPos.x * m_integerPrecision, v2CoordPos.y * m_integerPrecision, 0.f);
84 ClosestPoint::OnTriangleVsConeCast2d(v0, v1, v2, m_startCenter,m_normalizedDir2d, m_length, m_halfWidth, unused, cost);
95 Vec2f m_normalizedDir2d;
99 OrientedBox2d m_orientedBox2d;
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
Vec2LL CoordPos64
A type that represents the position of a point within the 2D integer grid.
Definition: navmeshtypes.h:16
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
float KyFloat32
float
Definition: types.h:32