gwnavruntime/navmesh/traverselogic.h Source File

traverselogic.h
Go to the documentation of this file.
1 /*
2 * Copyright 2016 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 #pragma once
8 
13 
34 #define KY_TRAVERSE_LOGIC(className_, costMode_, canEnterMode_) \
35 private: \
36  className_(); \
37  KY_CLASS_WITHOUT_COPY(className_) \
38  typedef className_<canEnterMode_> BaseClass; \
39 public: \
40  typedef costMode_ CostMultiplierUsage; \
41  typedef canEnterMode_ CanEnterNavTagMode; \
42 private:
43 
44 namespace Kaim
45 {
46 
47 class NavTriangleRawPtr;
48 class NavGraphEdgeRawPtr;
49 
52 
55 
60 
65 
70 
72 template <class TCanEnterNavTagMode = LogicDoNotUseCanEnterNavTag>
74 {
76 public:
78  static bool CanTraverseNavTag(void* /*traverseLogicUserData*/, const NavTag& /*navTag*/) { return true; }
79 
81  static KyFloat32 GetHeuristicFromDistanceToDest(void* /*traverseLogicUserData*/, KyFloat32 distance3dToDestination) { return distance3dToDestination; }
82 
84  static bool CanEnterNavTag(void* /*traverseLogicUserData*/, const NavTag& /*exitNavTag*/, const NavTag& /*enterNavTag*/, const Vec3f& /*pos*/) { return true; }
85 };
86 
88 class DefaultTraverseLogic : public SimpleTraverseLogic<LogicDoNotUseCanEnterNavTag>
89 {
90 };
91 
92 
94 template <class TCanEnterNavTagMode>
96 {
98 public:
102  static bool CanTraverseNavTag(void* /*traverseLogicUserData*/, const NavTag& /*navTag*/, KyFloat32* /*costMultiplier*/) { return true; }
103 
107  static KyFloat32 GetHeuristicFromDistanceToDest(void* /*traverseLogicUserData*/, KyFloat32 distance3dToDestination) { return distance3dToDestination; }
108 
110  static bool CanEnterNavTag(void* /*traverseLogicUserData*/, const NavTag& /*exitNavTag*/, const NavTag& /*enterNavTag*/, const Vec3f& /*pos*/) { return true; }
111 };
112 
113 
116 template <class TCanEnterNavTagMode>
118 {
120 public:
124  static bool CanTraverseNavTriangle(void* /*traverseLogicUserData*/, const NavTriangleRawPtr& /*triangle*/, KyFloat32* /*costMultiplier*/) { return true; }
125 
129  static bool CanTraverseNavGraphEdge(void* /*traverseLogicUserData*/, const NavGraphEdgeRawPtr& /*graphEdge*/, KyFloat32* /*costMultiplier*/) { return true; }
130 
134  static KyFloat32 GetHeuristicFromDistanceToDest(void* /*traverseLogicUserData*/, KyFloat32 distance3dToDestination) { return distance3dToDestination; }
135 
137  static bool CanEnterNavTag(void* /*traverseLogicUserData*/, const NavTag& /*exitNavTag*/, const NavTag& /*enterNavTag*/, const Vec3f& /*pos*/) { return true; }
138 };
139 
140 
141 }
142 
143 
static bool CanTraverseNavGraphEdge(void *, const NavGraphEdgeRawPtr &, KyFloat32 *)
Must return true if graphEdge is allowed.
Definition: traverselogic.h:129
static bool CanTraverseNavTag(void *, const NavTag &)
Called when the propagation traverses a different navTag than the the current one. Must return true if the navTag is allowed.
Definition: traverselogic.h:78
SimpleTraverseLogic defines the functions called when the customization is simply: navTag is allowed ...
Definition: traverselogic.h:73
static bool CanEnterNavTag(void *, const NavTag &, const NavTag &, const Vec3f &)
Called if TCanEnterNavTagMode==LogicDoUseCanEnterNavTag. Must return true when traversing from exitNa...
Definition: traverselogic.h:110
static KyFloat32 GetHeuristicFromDistanceToDest(void *, KyFloat32 distance3dToDestination)
Called for each node in AstarQuery.
Definition: traverselogic.h:107
static bool CanTraverseNavTriangle(void *, const NavTriangleRawPtr &, KyFloat32 *)
Must return true if triangle is allowed.
Definition: traverselogic.h:124
Each instance of this class uniquely identifies a single NavGraphEdge in a NavGraph.
Definition: navgraphedgerawptr.h:26
TraverseLogicWithCostPerNavTag defines the functions called when cost customization is per NavTag...
Definition: traverselogic.h:95
static KyFloat32 GetHeuristicFromDistanceToDest(void *, KyFloat32 distance3dToDestination)
Called for each node in AstarQuery.
Definition: traverselogic.h:134
#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
static bool CanEnterNavTag(void *, const NavTag &, const NavTag &, const Vec3f &)
Called if TCanEnterNavTagMode==LogicDoUseCanEnterNavTag. Must return true when traversing from exitNa...
Definition: traverselogic.h:84
Tag type used for function overloading in templates.
Definition: traverselogic.h:69
static KyFloat32 GetHeuristicFromDistanceToDest(void *, KyFloat32 distance3dToDestination)
Called for each node in AstarQuery. Must return the approximate cost of moving the specified cost tow...
Definition: traverselogic.h:81
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
Tag type used for function overloading in templates.
Definition: traverselogic.h:59
Identifies a single NavTriangle in a NavFloor.
Definition: navtrianglerawptr.h:21
TraverseLogicWithCostPerTriangle defines the functions called when cost customization is per primitiv...
Definition: traverselogic.h:117
static bool CanEnterNavTag(void *, const NavTag &, const NavTag &, const Vec3f &)
Called if TCanEnterNavTagMode==LogicDoUseCanEnterNavTag. Must return true when traversing from exitNa...
Definition: traverselogic.h:137
Tag type used for function overloading in templates.
Definition: traverselogic.h:64
Tag type used for function overloading in templates. It will be set as a nested typedef in CustomTrav...
Definition: traverselogic.h:54
static bool CanTraverseNavTag(void *, const NavTag &, KyFloat32 *)
Called when the propagation traverses a different navTag than the the current one.
Definition: traverselogic.h:102
Tag type used for function overloading in templates. It will be set as a nested typedef in CustomTrav...
Definition: traverselogic.h:51
SimpleTraverseLogic with TCanEnterNavTagMode = LogicDoNotUseCanEnterNavTag.
Definition: traverselogic.h:88
float KyFloat32
float
Definition: types.h:32
3d vector using 32bits floating points.
Definition: vec3f.h:16