gwnavruntime/navmesh/blobs/navfloorblobbuilder.h Source File

navfloorblobbuilder.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 
10 
11 namespace Kaim
12 {
13 
14 class DynamicNavFloor;
15 class NavFloorBlob;
16 class NavFloor1To1StitchDataBlob;
17 class NavFloor1To1StitchDataBlobBuilder;
18 class Stitch1To1ToHalfEdgeInFloor;
19 class NavHalfEdge;
20 class DynamicNavVertex;
21 class NavVertex;
22 
23 class NavFloorBlobBuilder : public BaseBlobBuilder<NavFloorBlob>
24 {
25  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_NavData)
26 public:
27  NavFloorBlobBuilder(const DynamicNavFloor& dynamicNavFloor, const NavFloor1To1StitchDataBlob* floor1To1StitchData, bool hasDifferentLinkFromStitch1To1Edge) :
28  m_dynamicNavFloor(&dynamicNavFloor), m_floor1To1StitchData(floor1To1StitchData), m_hasDifferentLinkFromStitch1To1Edge(hasDifferentLinkFromStitch1To1Edge) {}
29 
30 private:
31  virtual void DoBuild();
32 
33  void WriteNavHalfEdges(NavHalfEdge* edges, KyUInt32 numberOfTriangles) const;
34  void ComputeNavFloorAABB(KyUInt32 numberOfVertices);
35 private:
36  const DynamicNavFloor* m_dynamicNavFloor;
37  const NavFloor1To1StitchDataBlob* m_floor1To1StitchData;
38  bool m_hasDifferentLinkFromStitch1To1Edge;
39 };
40 
41 class NavFloor1To1StitchDataBlobBuilder : public BaseBlobBuilder<NavFloor1To1StitchDataBlob>
42 {
43  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_NavData)
44 public:
45  NavFloor1To1StitchDataBlobBuilder(const DynamicNavFloor& dynamicNavFloor) :
46  m_dynamicNavFloor(&dynamicNavFloor) {}
47 
48 private:
49  virtual void DoBuild();
50  void PushVertex(const DynamicNavVertex& vertex, NavVertex* navVerticesBuffer, KyFloat32* navVertexAltitudesBuffer, KyUInt32 currentVertexIdx);
51  void SetEdgeData(KyUInt32& edgeData, KyUInt32 startVertexIdx, KyUInt32 endVertexIdx, KyUInt32 edgeType)
52  {
53  KY_ASSERT(startVertexIdx != KyUInt32MAXVAL && ((startVertexIdx & 0xFFF00000) == 0));
54  KY_ASSERT(endVertexIdx != KyUInt32MAXVAL && ((endVertexIdx & 0xFFF00000) == 0));
55  edgeData = 0;
56  edgeData |= startVertexIdx;
57  edgeData |= (endVertexIdx << 12);
58  edgeData |= (edgeType << 29);
59  }
60 private:
61  const DynamicNavFloor* m_dynamicNavFloor;
62 };
63 
64 
65 class Stitch1To1ToHalfEdgeInFloorBlobBuilder : public BaseBlobBuilder<Stitch1To1ToHalfEdgeInFloor>
66 {
67  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_NavData)
68 public:
69  Stitch1To1ToHalfEdgeInFloorBlobBuilder(const DynamicNavFloor* dynamicNavFloor, const NavFloor1To1StitchDataBlob* floor1To1StitchData,
70  bool hasDifferentLinkFromStitch1To1Edge) :
71  m_dynamicNavFloor(dynamicNavFloor), m_floor1To1StitchDataBlob(floor1To1StitchData), m_hasDifferentLinkFromStitch1To1Edge(hasDifferentLinkFromStitch1To1Edge) {}
72 
73 private:
74  virtual void DoBuild();
75 
76 private:
77  const DynamicNavFloor* m_dynamicNavFloor;
78  const NavFloor1To1StitchDataBlob* m_floor1To1StitchDataBlob;
79  bool m_hasDifferentLinkFromStitch1To1Edge;
80 };
81 
82 
83 } // namespace Kaim
84 
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
#define KyUInt32MAXVAL
KyUInt32 max value
Definition: types.h:68
float KyFloat32
float
Definition: types.h:32