9 #ifndef Navigation_HigherCostLimitLogic_H
10 #define Navigation_HigherCostLimitLogic_H
17 class UserDataForHigherCostLimitLogic
21 UserDataForHigherCostLimitLogic(
KyFloat32 costLimit,
void* traverseLogicUserData) :
22 m_costLimit(costLimit), m_traverseLogicUserData(traverseLogicUserData) {}
25 void* m_traverseLogicUserData;
28 template <
class UserTraverseLogic>
29 class HigherCostLimitLogic
31 KY_TRAVERSE_LOGIC(HigherCostLimitLogic,
typename UserTraverseLogic::CostMultiplierUsage,
typename UserTraverseLogic::CanEnterNavTagMode)
33 static
KyFloat32 GetHeuristicFromDistanceToDest(
void* traverseLogicUserData,
KyFloat32 distance3DToDestination);
34 static
bool CanEnterNavTag(
void* traverseLogicUserData, const NavTag& exitNavTag, const NavTag& enterNavTag, const Vec3f& pos);
35 static
bool CanTraverseNavTag(
void* traverseLogicUserData, const NavTag& navTag);
36 static
bool CanTraverseNavTag(
void* traverseLogicUserData, const NavTag& navTag,
KyFloat32* costMultiplier);
37 static
bool CanTraverseNavTriangle(
void* traverseLogicUserData, const NavTriangleRawPtr& triangle,
KyFloat32* costmultiplier);
38 static
bool CanTraverseNavGraphEdge(
void* traverseLogicUserData, const NavGraphEdgeRawPtr& graphEdge,
KyFloat32* costMultiplier);
41 static
bool CanEnterNavTag(const LogicDoUseCanEnterNavTag&,
void* traverseLogicUserData, const NavTag& exitNavTag, const NavTag& enterNavTag, const Vec3f& pos);
43 static
bool CanTraverseNavTag(const LogicWithoutCostMultipler&,
void* traverseLogicUserData, const NavTag& navTag);
45 static
bool CanTraverseNavTag(const LogicWithCostMultiplerPerNavTag&,
void* traverseLogicUserData, const NavTag& navTag,
KyFloat32* costMultiplier);
47 static
bool CanTraverseNavTriangle(const LogicWithCostMultiplerPerTriangle&,
void* traverseLogicUserData, const NavTriangleRawPtr& triangle,
KyFloat32* costmultiplier);
48 static
bool CanTraverseNavGraphEdge(const LogicWithCostMultiplerPerTriangle&,
void* traverseLogicUserData, const NavGraphEdgeRawPtr& graphEdge,
KyFloat32* costMultiplier);
51 static
bool CanEnterNavTag(const LogicDoNotUseCanEnterNavTag&,
void* traverseLogicUserData, const NavTag& exitNavTag, const NavTag& enterNavTag, const Vec3f& pos);
52 static
bool CanTraverseNavTag(const LogicWithCostMultiplerPerNavTag&,
void* traverseLogicUserData, const NavTag& navTag);
53 static
bool CanTraverseNavTag(const LogicWithCostMultiplerPerTriangle&,
void* traverseLogicUserData, const NavTag& navTag);
54 static
bool CanTraverseNavTag(const LogicWithoutCostMultipler&,
void* traverseLogicUserData, const NavTag& navTag,
KyFloat32* costMultiplier);
55 static
bool CanTraverseNavTag(const LogicWithCostMultiplerPerTriangle&,
void* traverseLogicUserData, const NavTag& navTag,
KyFloat32* costMultiplier);
56 static
bool CanTraverseNavTriangle(const LogicWithoutCostMultipler&,
void* traverseLogicUserData, const NavTriangleRawPtr& triangle,
KyFloat32* costmultiplier);
57 static
bool CanTraverseNavTriangle(const LogicWithCostMultiplerPerNavTag&,
void* traverseLogicUserData, const NavTriangleRawPtr& triangle,
KyFloat32* costmultiplier);
58 static
bool CanTraverseNavGraphEdge(const LogicWithoutCostMultipler&,
void* traverseLogicUserData, const NavGraphEdgeRawPtr& graphEdge,
KyFloat32* costMultiplier);
59 static
bool CanTraverseNavGraphEdge(const LogicWithCostMultiplerPerNavTag&,
void* traverseLogicUserData, const NavGraphEdgeRawPtr& graphEdge,
KyFloat32* costMultiplier);
62 template <class UserTraverseLogic>
63 KY_INLINE
KyFloat32 HigherCostLimitLogic<UserTraverseLogic>::GetHeuristicFromDistanceToDest(
void* traverseLogicUserData,
KyFloat32 distance3DToDestination)
65 UserDataForHigherCostLimitLogic* userDataForHigherCostLimitLogic = (UserDataForHigherCostLimitLogic*) traverseLogicUserData;
66 return UserTraverseLogic::GetHeuristicFromDistanceToDest(userDataForHigherCostLimitLogic->m_traverseLogicUserData, distance3DToDestination);
69 template <
class UserTraverseLogic>
70 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanEnterNavTag(
void* traverseLogicUserData,
const NavTag& exitNavTag,
const NavTag& enterNavTag,
const Vec3f& pos)
72 return CanEnterNavTag(CanEnterNavTagMode(), traverseLogicUserData, exitNavTag, enterNavTag, pos);
74 template <
class UserTraverseLogic>
75 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavTag(
void* traverseLogicUserData,
const NavTag& navTag)
77 return CanTraverseNavTag(CostMultiplierUsage(), traverseLogicUserData, navTag);
79 template <
class UserTraverseLogic>
80 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavTag(
void* traverseLogicUserData,
const NavTag& navTag,
KyFloat32* costMultiplier)
82 return CanTraverseNavTag(CostMultiplierUsage(), traverseLogicUserData, navTag, costMultiplier);
84 template <
class UserTraverseLogic>
85 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavTriangle(
void* traverseLogicUserData,
const NavTriangleRawPtr& triangle,
KyFloat32* costmultiplier)
87 return CanTraverseNavTriangle(CostMultiplierUsage(), traverseLogicUserData, triangle, costmultiplier);
89 template <
class UserTraverseLogic>
90 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavGraphEdge(
void* traverseLogicUserData,
const NavGraphEdgeRawPtr& graphEdge,
KyFloat32* costMultiplier)
92 return CanTraverseNavGraphEdge(CostMultiplierUsage(), traverseLogicUserData, graphEdge, costMultiplier);
95 template <
class UserTraverseLogic>
96 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanEnterNavTag(
const LogicDoUseCanEnterNavTag&,
void* traverseLogicUserData,
const NavTag& exitNavTag,
const NavTag& enterNavTag,
const Vec3f& pos)
98 UserDataForHigherCostLimitLogic* userDataForHigherCostLimitLogic = (UserDataForHigherCostLimitLogic*) traverseLogicUserData;
99 return UserTraverseLogic::CanEnterNavTag(userDataForHigherCostLimitLogic->m_traverseLogicUserData, exitNavTag, enterNavTag, pos);
102 template <
class UserTraverseLogic>
103 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavGraphEdge(
const LogicWithCostMultiplerPerTriangle&,
void* traverseLogicUserData,
const NavGraphEdgeRawPtr& graphEdge,
KyFloat32* costMultiplier)
105 UserDataForHigherCostLimitLogic* userDataForHigherCostLimitLogic = (UserDataForHigherCostLimitLogic*) traverseLogicUserData;
106 return UserTraverseLogic::CanTraverseNavGraphEdge(userDataForHigherCostLimitLogic->m_traverseLogicUserData, graphEdge, costMultiplier);
109 template <
class UserTraverseLogic>
110 KY_INLINE
bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavTag(
const LogicWithoutCostMultipler&,
void* traverseLogicUserData,
const NavTag& navTag)
112 UserDataForHigherCostLimitLogic* userDataForHigherCostLimitLogic = (UserDataForHigherCostLimitLogic*) traverseLogicUserData;
113 return UserTraverseLogic::CanTraverseNavTag(userDataForHigherCostLimitLogic->m_traverseLogicUserData, navTag);
115 template <
class UserTraverseLogic>
116 inline bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavTag(
const LogicWithCostMultiplerPerNavTag&,
void* traverseLogicUserData,
const NavTag& navTag,
KyFloat32* costMultiplier)
119 UserDataForHigherCostLimitLogic* userDataForHigherCostLimitLogic = (UserDataForHigherCostLimitLogic*) traverseLogicUserData;
121 bool canTraverse = UserTraverseLogic::CanTraverseNavTag(userDataForHigherCostLimitLogic->m_traverseLogicUserData, navTag, &localCostMultiplier);
124 *costMultiplier = localCostMultiplier;
126 if (canTraverse ==
false)
129 return localCostMultiplier <= userDataForHigherCostLimitLogic->m_costLimit;
132 template <
class UserTraverseLogic>
133 inline bool HigherCostLimitLogic<UserTraverseLogic>::CanTraverseNavTriangle(
const LogicWithCostMultiplerPerTriangle&,
void* traverseLogicUserData,
const NavTriangleRawPtr& triangle,
KyFloat32* costMultiplier)
136 UserDataForHigherCostLimitLogic* userDataForHigherCostLimitLogic = (UserDataForHigherCostLimitLogic*) traverseLogicUserData;
137 bool canTraverse = UserTraverseLogic::CanTraverseNavTriangle(userDataForHigherCostLimitLogic->m_traverseLogicUserData, triangle, &localCostMultiplier);
140 *costMultiplier = localCostMultiplier;
142 if (canTraverse ==
false)
145 return localCostMultiplier <= userDataForHigherCostLimitLogic->m_costLimit;
152 #endif //Navigation_HigherCostLimitLogic_H
#define KY_TRAVERSE_LOGIC(ClassName, costMode, canEnterMode)
Define to forbid constructor, copy constructor and copy assignment.
Definition: types.h:489
#define KY_NULL
Null value.
Definition: types.h:247
Definition: gamekitcrowddispersion.h:20
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:137
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43