gwnavruntime/navmesh/blobs/navfloorblobbuilder.h Source File

navfloorblobbuilder.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 // Primary contact: JUBA - secondary contact: NOBODY
8 #ifndef Navigation_NavFloorBlobBuilder_H
9 #define Navigation_NavFloorBlobBuilder_H
10 
12 
13 namespace Kaim
14 {
15 
16 class DynamicNavFloor;
17 class NavFloorBlob;
18 class NavFloor1To1StitchDataBlob;
19 class NavFloor1To1StitchDataBlobBuilder;
20 class Stitch1To1ToHalfEdgeInFloor;
21 class NavHalfEdge;
22 class DynamicNavVertex;
23 class NavVertex;
24 
25 class NavFloorBlobBuilder : public BaseBlobBuilder<NavFloorBlob>
26 {
27  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_NavData)
28 public:
29  NavFloorBlobBuilder(const DynamicNavFloor& dynamicNavFloor, const NavFloor1To1StitchDataBlob* floor1To1StitchData, bool hasDifferentLinkFromStitch1To1Edge) :
30  m_dynamicNavFloor(&dynamicNavFloor), m_floor1To1StitchData(floor1To1StitchData), m_hasDifferentLinkFromStitch1To1Edge(hasDifferentLinkFromStitch1To1Edge) {}
31 
32 private:
33  virtual void DoBuild();
34 
35  void WriteNavHalfEdges(NavHalfEdge* edges, KyUInt32 numberOfTriangles) const;
36  void ComputeNavFloorAABB(KyUInt32 numberOfVertices);
37 private:
38  const DynamicNavFloor* m_dynamicNavFloor;
39  const NavFloor1To1StitchDataBlob* m_floor1To1StitchData;
40  bool m_hasDifferentLinkFromStitch1To1Edge;
41 };
42 
43 class NavFloor1To1StitchDataBlobBuilder : public BaseBlobBuilder<NavFloor1To1StitchDataBlob>
44 {
45  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_NavData)
46 public:
47  NavFloor1To1StitchDataBlobBuilder(const DynamicNavFloor& dynamicNavFloor) :
48  m_dynamicNavFloor(&dynamicNavFloor) {}
49 
50 private:
51  virtual void DoBuild();
52  void PushVertex(const DynamicNavVertex& vertex, NavVertex* navVerticesBuffer, KyFloat32* navVertexAltitudesBuffer, KyUInt32 currentVertexIdx);
53  void SetEdgeData(KyUInt32& edgeData, KyUInt32 startVertexIdx, KyUInt32 endVertexIdx, KyUInt32 edgeType)
54  {
55  KY_ASSERT(startVertexIdx != KyUInt32MAXVAL && ((startVertexIdx & 0xFFF00000) == 0));
56  KY_ASSERT(endVertexIdx != KyUInt32MAXVAL && ((endVertexIdx & 0xFFF00000) == 0));
57  edgeData = 0;
58  edgeData |= startVertexIdx;
59  edgeData |= (endVertexIdx << 12);
60  edgeData |= (edgeType << 29);
61  }
62 private:
63  const DynamicNavFloor* m_dynamicNavFloor;
64 };
65 
66 
67 class Stitch1To1ToHalfEdgeInFloorBlobBuilder : public BaseBlobBuilder<Stitch1To1ToHalfEdgeInFloor>
68 {
69  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_NavData)
70 public:
71  Stitch1To1ToHalfEdgeInFloorBlobBuilder(const DynamicNavFloor* dynamicNavFloor, const NavFloor1To1StitchDataBlob* floor1To1StitchData,
72  bool hasDifferentLinkFromStitch1To1Edge) :
73  m_dynamicNavFloor(dynamicNavFloor), m_floor1To1StitchDataBlob(floor1To1StitchData), m_hasDifferentLinkFromStitch1To1Edge(hasDifferentLinkFromStitch1To1Edge) {}
74 
75 private:
76  virtual void DoBuild();
77 
78 private:
79  const DynamicNavFloor* m_dynamicNavFloor;
80  const NavFloor1To1StitchDataBlob* m_floor1To1StitchDataBlob;
81  bool m_hasDifferentLinkFromStitch1To1Edge;
82 };
83 
84 
85 } // namespace Kaim
86 
87 #endif // Navigation_NavFloorBlobBuilder_H
Definition: gamekitcrowddispersion.h:20
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:137
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
#define KyUInt32MAXVAL
The maximum value that can be stored in the KyUInt32 variable type.
Definition: types.h:226
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43