gwnavruntime/channel/gatedefinitioncomputer.h Source File

gatedefinitioncomputer.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 
14 namespace Kaim
15 {
16 
17 class Database;
18 class WorkingMemory;
19 class Bubble;
20 class StringPulledEdge;
21 class StringPulledBubbleList;
22 class GateDefinitionArray;
23 
24 enum GateDefinitionComputerResult
25 {
26  GateDefinitionComputer_NotProcessed,
27 
28  GateDefinitionComputer_ComputingStartGateDefinition,
29  GateDefinitionComputer_ComputingTurnGateDefinition,
30  GateDefinitionComputer_ComputingEndGateDefinition,
31 
32  GateDefinitionComputer_Success,
33 
34  GateDefinitionComputer_Error_NoMargin,
35  GateDefinitionComputer_Error_Clamping
36 };
37 
38 class GateDefinitionComputer
39 {
40 public:
41  GateDefinitionComputer() { Clear(); }
42 
43  void Clear();
44 
45  void Initialize(Database* database, const ChannelComputerConfig& channelConfig, const StringPulledBubbleList& stringPulledBubbleList, GateDefinitionArray* gateDefinitionArray);
46 
47  void SetTraverseLogicUserData(void* traverseLogicUserData) { m_traverseLogicUserData = traverseLogicUserData; }
48 
49  bool IsFinished() const;
50  GateDefinitionComputerResult GetResult() const { return m_result; }
51 
52  void* GetTraverseLogicUserData() const { return m_traverseLogicUserData; }
53 
54  template<class TLogic> GateDefinitionComputerResult Advance(WorkingMemory* workingMemory);
55 
56 private:
57  void InitializeProcessing() { m_result = GateDefinitionComputer_ComputingStartGateDefinition; }
58 
59  template<class TLogic> void ProcessStartGateDefinition(WorkingMemory* workingMemory);
60  template<class TLogic> void ProcessTurnGateDefinition(WorkingMemory* workingMemory);
61  template<class TLogic> void ProcessEndGateDefinition(WorkingMemory* workingMemory);
62  template<class TLogic> GateDefinitionComputerResult ComputeTurnGateDefinitions(const Bubble& bubble, const StringPulledEdge& prevEdge, const StringPulledEdge& nextEdge, WorkingMemory* workingMemory);
63  template<class TLogic> KyResult ClampPosition(Vec3f& pos, WorkingMemory* workingMemory);
64 
65 private:
66  Database* m_database;
67  //TODO WorkingMemory* workingMemory
68  void* m_traverseLogicUserData;
69 
70  // computed from channelConfig
71  KyFloat32 m_channelMargin;
72  KyFloat32 m_turnSamplingAngleRad;
73 
74  const StringPulledBubbleList* m_stringPulledBubbleList; // input
75  Ptr<GateDefinitionArray> m_gateDefinitionArray; // output
76  GateDefinitionComputerResult m_result; // output
77 
78  // Time-slicing
79  KyUInt32 m_internalBubbleCount;
80  KyUInt32 m_bubbleIdx;
81 
82  // Clamping
83  Vec3f m_lastClampedPosition;
84  NavTrianglePtr m_lastClampedPositionTriangle;
85 };
86 
87 KY_INLINE bool GateDefinitionComputer::IsFinished() const
88 {
89  return (
90  (m_result == GateDefinitionComputer_Success) ||
91  (m_result == GateDefinitionComputer_Error_NoMargin) ||
92  (m_result == GateDefinitionComputer_Error_Clamping)
93  );
94 }
95 
96 } // namespace Kaim
97 
98 
100 
101 
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
float KyFloat32
float
Definition: types.h:32