gwnavruntime/navmesh/traverselogic.h Source File

traverselogic.h
Go to the documentation of this file.
1 /*
2 * Copyright 2015 Autodesk, Inc. All rights reserved.
3 * Use of this software is subject to the terms of the Autodesk license agreement and any attachments or Appendices thereto provided at the time of installation or download,
4 * or which otherwise accompanies this software in either electronic or hard copy form, or which is signed by you and accepted by Autodesk.
5 */
6 
7 
8 // ---------- Primary contact: JUBA - secondary contact: GUAL
9 #ifndef Navigation_TraverseLogic_H
10 #define Navigation_TraverseLogic_H
11 
12 
17 
18 namespace Kaim
19 {
20 
21 class NavTriangleRawPtr;
22 class NavGraphEdgeRawPtr;
23 
24 class LogicDoNotUseCanEnterNavTag { public: LogicDoNotUseCanEnterNavTag() {} };
25 class LogicDoUseCanEnterNavTag { public: LogicDoUseCanEnterNavTag() {} };
26 
27 class LogicWithoutCostMultipler { public: LogicWithoutCostMultipler() {} };
28 class LogicWithCostMultiplerPerNavTag { public: LogicWithCostMultiplerPerNavTag() {} };
29 class LogicWithCostMultiplerPerTriangle { public: LogicWithCostMultiplerPerTriangle() {} };
30 
54 
57 template <class TCanEnterNavTagMode = LogicDoNotUseCanEnterNavTag>
58 class SimpleTraverseLogic
59 {
60  KY_TRAVERSE_LOGIC(SimpleTraverseLogic, LogicWithoutCostMultipler, TCanEnterNavTagMode)
61 public:
65  static KY_INLINE bool CanTraverseNavTag(void* /*traverseLogicUserData*/, const NavTag& /*navTag*/) { return true; }
66 
71  static KY_INLINE KyFloat32 GetHeuristicFromDistanceToDest(void* /*traverseLogicUserData*/, KyFloat32 distance3DToDestination) { return distance3DToDestination; }
72 
75  static KY_INLINE bool CanEnterNavTag(void* /*traverseLogicUserData*/, const NavTag& /*exitNavTag*/, const NavTag& /*enterNavTag*/,
76  const Vec3f& /*pos*/) { return true; }
77 
78 private:
79  // ----- Obsolete Functions -----
85 
86  static bool CanTraverse(void*, const Kaim::NavTag&)
87  { KY_LOG_ERROR(("Obsolete Function should never be called")); KY_DEBUG_BREAK; return false; }
88 
89  static KyFloat32 GetCostMultiplier(void*, const Kaim::NavTag&)
90  { KY_LOG_ERROR(("Obsolete Function should never be called")); KY_DEBUG_BREAK; return 0.f; }
91 
92  static bool CanTraverseGraphEdgeAndGetCost(void*, const Kaim::Vec3f&, const Kaim::Vec3f&, const Kaim::NavTag&, KyFloat32&)
93  { KY_LOG_ERROR(("Obsolete Function should never be called")); KY_DEBUG_BREAK; return false; }
94 };
95 
96 
97 class DefaultTraverseLogic : public SimpleTraverseLogic<LogicDoNotUseCanEnterNavTag>
98 {
99 };
100 
101 
102 
103 
106 template <class TCanEnterNavTagMode>
107 class TraverseLogicWithCostMultiplerPerNavTag
108 {
109  KY_TRAVERSE_LOGIC(TraverseLogicWithCostMultiplerPerNavTag, LogicWithCostMultiplerPerNavTag, TCanEnterNavTagMode)
110 public:
111 
123  static KY_INLINE bool CanTraverseNavTag(void* /*traverseLogicUserData*/, const NavTag& /*navTag*/, KyFloat32* /*costMultiplier*/) { return true; }
124 
129  static KY_INLINE KyFloat32 GetHeuristicFromDistanceToDest(void* /*traverseLogicUserData*/, KyFloat32 distance3DToDestination) { return distance3DToDestination; }
130 
133  static KY_INLINE bool CanEnterNavTag(void* /*traverseLogicUserData*/, const NavTag& /*exitNavTag*/, const NavTag& /*enterNavTag*/,
134  const Vec3f& /*pos*/) { return true; }
135 
136 private:
137  // ----- Obsolete Functions -----
143 };
144 
145 
146 
152 template <class TCanEnterNavTagMode>
154 {
155  KY_TRAVERSE_LOGIC(TraverseLogicWithCostPerTriangle, LogicWithCostMultiplerPerTriangle, TCanEnterNavTagMode)
156 public:
168  static KY_INLINE bool CanTraverseNavTriangle (void* /*traverseLogicUserData*/, const NavTriangleRawPtr& /*triangle*/, KyFloat32* /*costmultiplier*/) { return true; }
169  static KY_INLINE bool CanTraverseNavGraphEdge(void* /*traverseLogicUserData*/, const NavGraphEdgeRawPtr& /*graphEdge*/, KyFloat32* /*costMultiplier*/) { return true; }
170 
175  static KY_INLINE KyFloat32 GetHeuristicFromDistanceToDest(void* /*traverseLogicUserData*/, KyFloat32 distance3DToDestination) { return distance3DToDestination; }
176 
179  static KY_INLINE bool CanEnterNavTag(void* /*traverseLogicUserData*/, const NavTag& /*exitNavTag*/, const NavTag& /*enterNavTag*/,
180  const Vec3f& /*pos*/) { return true; }
182 private:
183  // ----- Obsolete Functions -----
189 };
190 
191 
192 }
193 
194 #endif
195 
static bool CanTraverseNavTag(void *, const NavTag &)
These method are called each time the path finding query, path following system or any other query co...
Definition: traverselogic.h:72
static KyFloat32 GetHeuristicFromDistanceToDest(void *, KyFloat32 distance3DToDestination)
This method is called for each candidate node in the Path calculation.
Definition: traverselogic.h:78
#define KY_TRAVERSE_LOGIC(ClassName, costMode, canEnterMode)
Define to forbid constructor, copy constructor and copy assignment.
Definition: types.h:489
static bool CanTraverseNavTag(void *, const NavTag &, KyFloat32 *)
These method are called each time the path finding query, path following system or any other query co...
Definition: traverselogic.h:143
static KyFloat32 GetHeuristicFromDistanceToDest(void *, KyFloat32 distance3DToDestination)
This method is called for each candidate node in the A* calculation.
Definition: traverselogic.h:149
static bool CanTraverseNavTriangle(void *, const NavTriangleRawPtr &, KyFloat32 *)
These method are called each time the path finding query, path following system or any other query co...
Definition: traverselogic.h:201
static bool CanEnterNavTag(void *, const NavTag &, const NavTag &, const Vec3f &)
This method is only required when you set up your customizer to validate NavTag transitions.
Definition: traverselogic.h:153
static KyFloat32 GetHeuristicFromDistanceToDest(void *, KyFloat32 distance3DToDestination)
This method is called for each candidate node in the A* calculation.
Definition: traverselogic.h:208
Each instance of this class uniquely identifies a single NavGraphEdge in a NavGraph.
Definition: navgraphedgerawptr.h:33
static bool CanEnterNavTag(void *, const NavTag &, const NavTag &, const Vec3f &)
This method is only required when you set up your customizer to validate NavTag transitions.
Definition: traverselogic.h:82
Definition: gamekitcrowddispersion.h:20
Each instance of this class uniquely identifies a single NavTriangle in a NavFloor.
Definition: navtrianglerawptr.h:30
TraverseLogicWithCostMultiplerPerNavTag defines all the functions that are potentially called in the ...
Definition: traverselogic.h:181
static bool CanEnterNavTag(void *, const NavTag &, const NavTag &, const Vec3f &)
This method is only required when you set up your customizer to validate NavTag transitions.
Definition: traverselogic.h:212
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43
This class defines a three-dimensional vector whose coordinates are stored using floating-point numbe...
Definition: vec3f.h:23