gwnavgeneration/input/taggedtriangle3i.h Source File

taggedtriangle3i.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 
8 // primary contact: LASI - secondary contact: GUAL
9 #ifndef GwNavGen_TaggedTriangle3i_H
10 #define GwNavGen_TaggedTriangle3i_H
11 
14 
15 namespace Kaim
16 {
17 
18 class DynamicTaggedTriangle3i
19 {
20  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
21 
22 public:
23  DynamicTaggedTriangle3i() {}
24  DynamicTaggedTriangle3i(const Triangle3i& triangle) : m_triangle3i(triangle) {}
25  DynamicTaggedTriangle3i(const Triangle3i& triangle, const DynamicNavTag& navTag) : m_triangle3i(triangle), m_dynamicNavTag(navTag) {}
26 
27 public:
28  Triangle3i m_triangle3i;
29  DynamicNavTag m_dynamicNavTag;
30 };
31 
32 class TaggedTriangle3i
33 {
34  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
35 
36 public:
37  TaggedTriangle3i(): m_navTagIdx(KyUInt32MAXVAL) {}
38  bool IsWalkable() const { return m_navTag.IsWalkable(); }
39 
40 public:
41  Triangle3i m_triangle3i;
42  NavTag m_navTag;
43  mutable KyUInt32 m_navTagIdx; // index in CellGenerator::m_navTagArray
44  // BIG WARNING.. THIS weird mutable KyUInt32 m_navTagIdx WORKS IN MULTITHREAD GENERATION ONLY BECAUSE THE PARALLEL FOR NEVER PROCESS 2 NavCells at the same CellPos
45 };
46 
47 inline void SwapEndianness(Endianness::Target e, TaggedTriangle3i& self)
48 {
49  SwapEndianness(e, self.m_triangle3i);
50  SwapEndianness(e, self.m_navTag);
51  SwapEndianness(e, self.m_navTagIdx);
52 }
53 
54 class TaggedTriangle3iBlobBuilder : public BaseBlobBuilder<TaggedTriangle3i>
55 {
56 public:
57  TaggedTriangle3iBlobBuilder(const DynamicTaggedTriangle3i& dynamicTaggedTriangle3i) : m_dynamicTaggedTriangle3i(&dynamicTaggedTriangle3i) {}
58 private:
59  void DoBuild()
60  {
61  BLOB_SET(m_blob->m_triangle3i, m_dynamicTaggedTriangle3i->m_triangle3i);
62  BLOB_BUILD(m_blob->m_navTag, NavTagBlobBuilder(m_dynamicTaggedTriangle3i->m_dynamicNavTag));
63  }
64 
65  const DynamicTaggedTriangle3i* m_dynamicTaggedTriangle3i;
66 };
67 
68 class TaggedTriangle3iBlobCopier : public BaseBlobBuilder<TaggedTriangle3i>
69 {
70 public:
71  TaggedTriangle3iBlobCopier(const TaggedTriangle3i& taggedTriangle3i) : m_triangle3i(&taggedTriangle3i) {}
72 private:
73  void DoBuild()
74  {
75  BLOB_SET(m_blob->m_triangle3i, m_triangle3i->m_triangle3i);
76  BLOB_BUILD(m_blob->m_navTag, NavTagCopier(m_triangle3i->m_navTag));
77  }
78 
79  const TaggedTriangle3i* m_triangle3i;
80 };
81 
82 }
83 
84 
85 #endif
86 
#define BLOB_SET(blob, value)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:136
#define BLOB_BUILD(blob, builder)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:189
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:35
TaggedTriangle3i * m_blob
The blob maintained by this builder. Only modify using the macros listed under DoBuild().
Definition: baseblobbuilder.h:117
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