7 #ifndef Navigation_GateDefinitionComputer_H
8 #define Navigation_GateDefinitionComputer_H
22 class StringPulledEdge;
23 class StringPulledBubbleList;
24 class GateDefinitionArray;
27 class GateDefinitionComputerConfig
30 GateDefinitionComputerConfig() { SetDefaults(); }
37 enum GateDefinitionComputerResult
39 GateDefinitionComputer_NotProcessed,
41 GateDefinitionComputer_ComputingStartGateDefinition,
42 GateDefinitionComputer_ComputingTurnGateDefinition,
43 GateDefinitionComputer_ComputingEndGateDefinition,
45 GateDefinitionComputer_Success,
47 GateDefinitionComputer_Error_NoMargin,
48 GateDefinitionComputer_Error_Clamping
51 class GateDefinitionComputer
54 GateDefinitionComputer()
55 : m_traverseLogicUserData(
KY_NULL)
57 , m_stringPulledBubbleList(
KY_NULL)
58 , m_result(GateDefinitionComputer_NotProcessed)
59 , m_channelMargin(0.0f)
60 , m_turnSamplingAngleRad(0.0f)
61 , m_internalBubbleCount(0)
64 m_turnSamplingAngleRad = m_channelMargin * m_bubbleIdx;
67 void Initialize(Database* database,
const StringPulledBubbleList& stringPulledBubbleList, GateDefinitionArray* gateDefinitionArray);
68 bool IsFinished()
const;
69 GateDefinitionComputerResult GetResult()
const;
71 void* GetTraverseLogicUserData()
const;
72 void SetTraverseLogicUserData(
void* traverseLogicUserData);
74 template<
class TraverseLogic>
75 GateDefinitionComputerResult Advance(WorkingMemory* workingMemory);
78 void InitializeProcessing();
80 template<
class TraverseLogic>
81 void ProcessStartGateDefinition(WorkingMemory* workingMemory);
83 template<
class TraverseLogic>
84 void ProcessTurnGateDefinition(WorkingMemory* workingMemory);
86 template<
class TraverseLogic>
87 void ProcessEndGateDefinition(WorkingMemory* workingMemory);
89 template<
class TraverseLogic>
90 GateDefinitionComputerResult ComputeTurnGateDefinitions(
const Bubble& bubble,
const StringPulledEdge& prevEdge,
const StringPulledEdge& nextEdge, WorkingMemory* workingMemory);
92 template<
class TraverseLogic>
93 KyResult ClampPosition(Vec3f& pos, WorkingMemory* workingMemory);
96 void* m_traverseLogicUserData;
99 const StringPulledBubbleList* m_stringPulledBubbleList;
100 Ptr<GateDefinitionArray> m_gateDefinitionArray;
102 GateDefinitionComputerResult m_result;
113 Vec3f m_lastClampedPosition;
114 NavTrianglePtr m_lastClampedPositionTriangle;
118 GateDefinitionComputerConfig m_computerConfig;
121 KY_INLINE
bool GateDefinitionComputer::IsFinished()
const
124 (m_result == GateDefinitionComputer_Success) ||
125 (m_result == GateDefinitionComputer_Error_NoMargin) ||
126 (m_result == GateDefinitionComputer_Error_Clamping)
130 KY_INLINE GateDefinitionComputerResult GateDefinitionComputer::GetResult()
const {
return m_result; }
131 KY_INLINE
void GateDefinitionComputer::SetTraverseLogicUserData(
void* traverseLogicUserData) { m_traverseLogicUserData = traverseLogicUserData; }
132 KY_INLINE
void* GateDefinitionComputer::GetTraverseLogicUserData()
const {
return m_traverseLogicUserData; }
148 #endif // Navigation_GateDefinitionComputer_H
KyInt32 KyResult
Defines a type that can be returned by methods or functions in the Gameware Navigation SDK to indicat...
Definition: types.h:254
#define KY_NULL
Null value.
Definition: types.h:247
Definition: gamekitcrowddispersion.h:20
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43