14 class UserDataForHigherCostLimitLogic
18 UserDataForHigherCostLimitLogic(
KyFloat32 costLimit,
void* traverseLogicUserData) :
19 m_costLimit(costLimit), m_traverseLogicUserData(traverseLogicUserData) {}
22 void* m_traverseLogicUserData;
25 template <
class UserTraverseLogic>
26 class HigherCostLimitLogic
28 KY_TRAVERSE_LOGIC(HigherCostLimitLogic,
typename UserTraverseLogic::CostMultiplierUsage,
typename UserTraverseLogic::CanEnterNavTagMode)
30 static
KyFloat32 GetHeuristicFromDistanceToDest(
void* traverseLogicUserData,
KyFloat32 distance3DToDestination);
31 static
bool CanEnterNavTag(
void* traverseLogicUserData, const NavTag& exitNavTag, const NavTag& enterNavTag, const Vec3f& pos);
32 static
bool CanTraverseNavTag(
void* traverseLogicUserData, const NavTag& navTag);
33 static
bool CanTraverseNavTag(
void* traverseLogicUserData, const NavTag& navTag,
KyFloat32* costMultiplier);
34 static
bool CanTraverseNavTriangle(
void* traverseLogicUserData, const NavTriangleRawPtr& triangle,
KyFloat32* costmultiplier);
35 static
bool CanTraverseNavGraphEdge(
void* traverseLogicUserData, const NavGraphEdgeRawPtr& graphEdge,
KyFloat32* costMultiplier);
38 static
bool CanEnterNavTag(const LogicDoUseCanEnterNavTag&,
void* traverseLogicUserData, const NavTag& exitNavTag, const NavTag& enterNavTag, const Vec3f& pos);
40 static
bool CanTraverseNavTag(const LogicWithNoCustomCost&,
void* traverseLogicUserData, const NavTag& navTag);
42 static
bool CanTraverseNavTag(const LogicWithCostPerNavTag&,
void* traverseLogicUserData, const NavTag& navTag,
KyFloat32* costMultiplier);
44 static
bool CanTraverseNavTriangle(const LogicWithCostPerTriangle&,
void* traverseLogicUserData, const NavTriangleRawPtr& triangle,
KyFloat32* costmultiplier);
45 static
bool CanTraverseNavGraphEdge(const LogicWithCostPerTriangle&,
void* traverseLogicUserData, const NavGraphEdgeRawPtr& graphEdge,
KyFloat32* costMultiplier);
48 static
bool CanEnterNavTag(const LogicDoNotUseCanEnterNavTag&,
void* traverseLogicUserData, const NavTag& exitNavTag, const NavTag& enterNavTag, const Vec3f& pos);
49 static
bool CanTraverseNavTag(const LogicWithCostPerNavTag&,
void* traverseLogicUserData, const NavTag& navTag);
50 static
bool CanTraverseNavTag(const LogicWithCostPerTriangle&,
void* traverseLogicUserData, const NavTag& navTag);
51 static
bool CanTraverseNavTag(const LogicWithNoCustomCost&,
void* traverseLogicUserData, const NavTag& navTag,
KyFloat32* costMultiplier);
52 static
bool CanTraverseNavTag(const LogicWithCostPerTriangle&,
void* traverseLogicUserData, const NavTag& navTag,
KyFloat32* costMultiplier);
53 static
bool CanTraverseNavTriangle(const LogicWithNoCustomCost&,
void* traverseLogicUserData, const NavTriangleRawPtr& triangle,
KyFloat32* costmultiplier);
54 static
bool CanTraverseNavTriangle(const LogicWithCostPerNavTag&,
void* traverseLogicUserData, const NavTriangleRawPtr& triangle,
KyFloat32* costmultiplier);
55 static
bool CanTraverseNavGraphEdge(const LogicWithNoCustomCost&,
void* traverseLogicUserData, const NavGraphEdgeRawPtr& graphEdge,
KyFloat32* costMultiplier);
56 static
bool CanTraverseNavGraphEdge(const LogicWithCostPerNavTag&,
void* traverseLogicUserData, const NavGraphEdgeRawPtr& graphEdge,
KyFloat32* costMultiplier);
59 template <class UserTraverseLogic>
60 KY_INLINE
KyFloat32 HigherCostLimitLogic<UserTraverseLogic>::GetHeuristicFromDistanceToDest(
void* traverseLogicUserData,
KyFloat32 distance3DToDestination)
62 UserDataForHigherCostLimitLogic* userDataForHigherCostLimitLogic = (UserDataForHigherCostLimitLogic*) traverseLogicUserData;
63 return UserTraverseLogic::GetHeuristicFromDistanceToDest(userDataForHigherCostLimitLogic->m_traverseLogicUserData, distance3DToDestination);
66 template <
class UserTraverseLogic>
67 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanEnterNavTag(
void* traverseLogicUserData,
const NavTag& exitNavTag,
const NavTag& enterNavTag,
const Vec3f& pos)
69 return CanEnterNavTag(CanEnterNavTagMode(), traverseLogicUserData, exitNavTag, enterNavTag, pos);
71 template <
class UserTraverseLogic>
72 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavTag(
void* traverseLogicUserData,
const NavTag& navTag)
74 return CanTraverseNavTag(CostMultiplierUsage(), traverseLogicUserData, navTag);
76 template <
class UserTraverseLogic>
77 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavTag(
void* traverseLogicUserData,
const NavTag& navTag,
KyFloat32* costMultiplier)
79 return CanTraverseNavTag(CostMultiplierUsage(), traverseLogicUserData, navTag, costMultiplier);
81 template <
class UserTraverseLogic>
82 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavTriangle(
void* traverseLogicUserData,
const NavTriangleRawPtr& triangle,
KyFloat32* costmultiplier)
84 return CanTraverseNavTriangle(CostMultiplierUsage(), traverseLogicUserData, triangle, costmultiplier);
86 template <
class UserTraverseLogic>
87 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavGraphEdge(
void* traverseLogicUserData,
const NavGraphEdgeRawPtr& graphEdge,
KyFloat32* costMultiplier)
89 return CanTraverseNavGraphEdge(CostMultiplierUsage(), traverseLogicUserData, graphEdge, costMultiplier);
92 template <
class UserTraverseLogic>
93 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanEnterNavTag(
const LogicDoUseCanEnterNavTag&,
void* traverseLogicUserData,
const NavTag& exitNavTag,
const NavTag& enterNavTag,
const Vec3f& pos)
95 UserDataForHigherCostLimitLogic* userDataForHigherCostLimitLogic = (UserDataForHigherCostLimitLogic*) traverseLogicUserData;
96 return UserTraverseLogic::CanEnterNavTag(userDataForHigherCostLimitLogic->m_traverseLogicUserData, exitNavTag, enterNavTag, pos);
99 template <
class UserTraverseLogic>
100 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavGraphEdge(
const LogicWithCostPerTriangle&,
void* traverseLogicUserData,
const NavGraphEdgeRawPtr& graphEdge,
KyFloat32* costMultiplier)
102 UserDataForHigherCostLimitLogic* userDataForHigherCostLimitLogic = (UserDataForHigherCostLimitLogic*) traverseLogicUserData;
103 return UserTraverseLogic::CanTraverseNavGraphEdge(userDataForHigherCostLimitLogic->m_traverseLogicUserData, graphEdge, costMultiplier);
106 template <
class UserTraverseLogic>
107 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavTag(
const LogicWithNoCustomCost&,
void* traverseLogicUserData,
const NavTag& navTag)
109 UserDataForHigherCostLimitLogic* userDataForHigherCostLimitLogic = (UserDataForHigherCostLimitLogic*) traverseLogicUserData;
110 return UserTraverseLogic::CanTraverseNavTag(userDataForHigherCostLimitLogic->m_traverseLogicUserData, navTag);
112 template <
class UserTraverseLogic>
113 inline bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavTag(
const LogicWithCostPerNavTag&,
void* traverseLogicUserData,
const NavTag& navTag,
KyFloat32* costMultiplier)
116 UserDataForHigherCostLimitLogic* userDataForHigherCostLimitLogic = (UserDataForHigherCostLimitLogic*) traverseLogicUserData;
118 bool canTraverse = UserTraverseLogic::CanTraverseNavTag(userDataForHigherCostLimitLogic->m_traverseLogicUserData, navTag, &localCostMultiplier);
120 if (costMultiplier !=
nullptr)
121 *costMultiplier = localCostMultiplier;
123 if (canTraverse ==
false)
126 return localCostMultiplier <= userDataForHigherCostLimitLogic->m_costLimit;
129 template <
class UserTraverseLogic>
130 inline bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavTriangle(
const LogicWithCostPerTriangle&,
void* traverseLogicUserData,
const NavTriangleRawPtr& triangle,
KyFloat32* costMultiplier)
133 UserDataForHigherCostLimitLogic* userDataForHigherCostLimitLogic = (UserDataForHigherCostLimitLogic*) traverseLogicUserData;
134 bool canTraverse = UserTraverseLogic::CanTraverseNavTriangle(userDataForHigherCostLimitLogic->m_traverseLogicUserData, triangle, &localCostMultiplier);
136 if (costMultiplier !=
nullptr)
137 *costMultiplier = localCostMultiplier;
139 if (canTraverse ==
false)
142 return localCostMultiplier <= userDataForHigherCostLimitLogic->m_costLimit;
#define KY_TRAVERSE_LOGIC(className_, costMode_, canEnterMode_)
A TraverseLogic is a full static class that implements some functions and typedef used to customize t...
Definition: traverselogic.h:34
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
float KyFloat32
float
Definition: types.h:32