My Project
BlockCoordinate.h
1 
2 #pragma once
3 
4 #include <stdint.h>
5 #include <math.h>
6 
7 namespace ParaEngine
8 {
10  struct Int16x3
11  {
12  int16_t x;
13  int16_t y;
14  int16_t z;
15 
16  Int16x3():x(0),y(0),z(0){}
17 
18  Int16x3(int16_t v):x(v),y(v),z(v){}
19 
20  Int16x3(int16_t ix,int16_t iy,int16_t iz)
21  :x(ix),y(iy),z(iz)
22  {
23  }
24 
25  Int16x3(const Int16x3& v)
26  :x(v.x),y(v.y),z(v.z)
27  {
28  }
29 
30  inline bool operator == (const Int16x3& v) const{
31  return x == v.x && y == v.y && z == v.z;
32  }
33 
34  inline bool operator != (const Int16x3& v) const{
35  return x != v.x || y != v.y || z != v.z;
36  }
37 
38  void SetValue(int16_t v);
39 
40  void Add(Int16x3& v);
41 
42  void Add(int16_t value);
43 
44  static void Add(const Int16x3& v0,const Int16x3& v1,Int16x3& oResult);
45 
46  void Add(const Int16x3& v0,int16_t v1,Int16x3& oResult);
47 
48  void Subtract(const Int16x3& value);
49 
50  void Subtract(int16_t value);
51 
52  static void Subtract(const Int16x3& v0,const Int16x3& v1,Int16x3& oResult);
53 
54  static void Subtract(const Int16x3& v0,int16_t v1,Int16x3& oResult);
55 
56  void Divide(Int16x3& value);
57 
58  void Divide(int16_t value);
59 
60  static void DivideTo(const Int16x3& v0,const Int16x3 v1,Int16x3& oResult);
61 
62  static void DivideTo(const Int16x3& v0,int16_t v1,Int16x3& oResult);
63 
64  void Mod(int value);
65 
66  static void Mod(const Int16x3& v0,int v1,Int16x3& oResult);
67 
68  void Abs();
69  };
70 
72  struct Uint16x3
73  {
74  uint16_t x;
75  uint16_t y;
76  uint16_t z;
77 
78  Uint16x3():x(0),y(0),z(0){}
79 
80  Uint16x3(uint16_t v):x(v),y(v),z(v){}
81 
82  Uint16x3(uint16_t ix,uint16_t iy,uint16_t iz)
83  :x(ix),y(iy),z(iz)
84  {
85  }
86 
87  Uint16x3(const Uint16x3& v)
88  :x(v.x),y(v.y),z(v.z)
89  {
90  }
91 
92  inline bool operator == (const Uint16x3& v) const{
93  return x == v.x && y == v.y && z == v.z;
94  }
95 
96  inline bool operator != (const Uint16x3& v) const{
97  return x != v.x || y != v.y || z != v.z;
98  }
99 
100  inline bool operator == (const Int16x3& v) const{
101  return x == v.x && y == v.y && z == v.z;
102  }
103 
104  inline bool operator != (const Int16x3& v) const{
105  return x != v.x || y != v.y || z != v.z;
106  }
107 
108  Uint16x3 operator +(const Int16x3& v) const{
109  return Uint16x3((uint16)(x + v.x), (uint16)(y + v.y), (uint16)(z + v.z));
110  }
111  Uint16x3 operator +(const Uint16x3& v) const{
112  return Uint16x3((x + v.x), (y + v.y), (z + v.z));
113  }
114  /* get the abs distance to another coordinates. abs(dx)+abs(dy)+abs(dz) */
115  uint32 AbsDistanceTo(const Uint16x3& v) const;
116 
118  DWORD GetHashCode() const { return ((x << 8) | y | (z << 20)); }
119 
120  };
121 
123  struct Int32x3
124  {
125  int32 x;
126  int32 y;
127  int32 z;
128 
129  Int32x3() :x(0), y(0), z(0){}
130 
131  Int32x3(int32 v) :x(v), y(v), z(v){}
132 
133  Int32x3(int32 ix, int32 iy, int32 iz)
134  :x(ix), y(iy), z(iz)
135  {
136  }
137 
138  Int32x3(const Int32x3& v)
139  :x(v.x), y(v.y), z(v.z)
140  {
141  }
142  };
143 
146  {
147  public:
148  ChunkLocation(uint16_t chunkX, uint16_t chunkZ);
149  ChunkLocation(int chunkPackedPos);
150  uint32_t GetPackedChunkPos() const;
151 
152  static uint32_t FromChunkToPackedChunk(int chunkX, int chunkZ);
153 
154  uint32_t GetCenterWorldX() const;
155 
156  uint32_t GetCenterWorldZ() const;
157 
158  bool operator == (const ChunkLocation& r) const;
159 
161  {
162  uint32_t operator()(const ChunkLocation& k) const
163  {
164  return k.GetPackedChunkPos();
165  }
166  };
167 
168  int DistanceToSquared(const ChunkLocation& coords) const;
169  public:
170  uint16_t m_chunkX;
171  uint16_t m_chunkZ;
172  };
173 
174 
175 
176 
177 
178 }
different physics engine has different winding order.
Definition: EventBinding.h:32
basic block world coordinate
Definition: BlockCoordinate.h:72
Definition: enum_maker.hpp:46
for block or chunk location that does not has boundary check.
Definition: BlockCoordinate.h:123
chunk column location.
Definition: BlockCoordinate.h:145
DWORD GetHashCode() const
get simple hash code
Definition: BlockCoordinate.h:118
basic block world coordinate
Definition: BlockCoordinate.h:10
Definition: BlockCoordinate.h:160