gwnavgeneration/input/taggedtriangle3i.h Source File

taggedtriangle3i.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 
8 #pragma once
9 
12 
13 namespace Kaim
14 {
15 
16 class DynamicTaggedTriangle3i
17 {
18  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
19 
20 public:
21  DynamicTaggedTriangle3i() {}
22  DynamicTaggedTriangle3i(const Vec3i& _a, const Vec3i& _b, const Vec3i& _c) : m_triangle3i(_a, _b, _c) {}
23  DynamicTaggedTriangle3i(const Triangle3i& triangle) : m_triangle3i(triangle) {}
24  DynamicTaggedTriangle3i(const Triangle3i& triangle, const DynamicNavTag& navTag) : m_triangle3i(triangle), m_dynamicNavTag(navTag) {}
25 
26 public:
27  Triangle3i m_triangle3i;
28  DynamicNavTag m_dynamicNavTag;
29 };
30 
31 class TaggedTriangle3i
32 {
33  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
34 
35 public:
36  TaggedTriangle3i(): m_navTagIdx(KyUInt32MAXVAL) {}
37  bool IsWalkable() const { return m_navTag.IsWalkable(); }
38 
39 public:
40  Triangle3i m_triangle3i;
41  NavTag m_navTag;
42  mutable KyUInt32 m_navTagIdx; // index in CellGenerator::m_navTagArray
43  // 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
44 };
45 
46 inline void SwapEndianness(Endianness::Target e, TaggedTriangle3i& self)
47 {
48  SwapEndianness(e, self.m_triangle3i);
49  SwapEndianness(e, self.m_navTag);
50  SwapEndianness(e, self.m_navTagIdx);
51 }
52 
53 class TaggedTriangle3iBlobBuilder : public BaseBlobBuilder<TaggedTriangle3i>
54 {
55 public:
56  TaggedTriangle3iBlobBuilder(const DynamicTaggedTriangle3i& dynamicTaggedTriangle3i) : m_dynamicTaggedTriangle3i(&dynamicTaggedTriangle3i) {}
57 private:
58  void DoBuild()
59  {
60  BLOB_SET(m_blob->m_triangle3i, m_dynamicTaggedTriangle3i->m_triangle3i);
61  BLOB_BUILD(m_blob->m_navTag, NavTagBlobBuilder(m_dynamicTaggedTriangle3i->m_dynamicNavTag));
62  }
63 
64  const DynamicTaggedTriangle3i* m_dynamicTaggedTriangle3i;
65 };
66 
67 class TaggedTriangle3iBlobCopier : public BaseBlobBuilder<TaggedTriangle3i>
68 {
69 public:
70  TaggedTriangle3iBlobCopier(const TaggedTriangle3i& taggedTriangle3i) : m_triangle3i(&taggedTriangle3i) {}
71 private:
72  void DoBuild()
73  {
74  BLOB_SET(m_blob->m_triangle3i, m_triangle3i->m_triangle3i);
75  BLOB_BUILD(m_blob->m_navTag, NavTagCopier(m_triangle3i->m_navTag));
76  }
77 
78  const TaggedTriangle3i* m_triangle3i;
79 };
80 
81 }
82 
83 
84 
#define BLOB_SET(blob, value)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:130
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define BLOB_BUILD(blob, builder)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:175
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:27
TaggedTriangle3i * m_blob
The blob maintained by this builder. Only modify using the macros listed under DoBuild().
Definition: baseblobbuilder.h:113
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
#define KyUInt32MAXVAL
KyUInt32 max value
Definition: types.h:68