My Project
BlockCommon.h
1 #pragma once
2 
3 #include <vector>
4 #include <array>
5 #include <unordered_set>
6 #include <stdint.h>
7 #include <bitset>
8 
9 #include "BlockConfig.h"
10 #include "BlockCoordinate.h"
11 #include "BlockIndex.h"
12 
13 namespace ParaEngine
14 {
15  class Block;
16  class BlockChunk;
17  class BlockRegion;
18  class BlockLight;
19  class RenderableChunk;
20  class LightGrid;
21  class BlockVertexCompressed;
22 
23 
24  enum BlockRenderPass
25  {
26  BlockRenderPass_Opaque = 0,
27  BlockRenderPass_AlphaTest,
28  BlockRenderPass_AlphaBlended,
29  // do not cast shadow, this is special in deferred shading.
30  BlockRenderPass_ReflectedWater,
31  };
32 
34  {
35  public:
37 
38  std::map<int64_t, Uint16x3>& GetBlocks();
39 
40  public:
41  std::map<int64_t, Uint16x3> m_blocks;
42  float m_fScaling;
43  bool m_bEnableBling;
44  LinearColor m_color;
45  bool m_bOnlyRenderClickableArea;
46  bool m_bWireFrame;
47  };
48 
49  enum RelativeBlockPos
50  {
51  rbp_center = 0,
52  rbp_pX,
53  rbp_nX,
54  rbp_pY,
55  rbp_nY,
56  rbp_pZ,
57  rbp_nZ,
58 
59  rbp_pXpY,
60  rbp_pXnY,
61  rbp_pXpZ,
62  rbp_pXnZ,
63 
64  rbp_nXpY,
65  rbp_nXnY,
66  rbp_nXpZ,
67  rbp_nXnZ,
68 
69  rbp_pYpZ,
70  rbp_pYnZ,
71  rbp_nYpZ,
72  rbp_nYnZ,
73 
74  rbp_pXpYpZ,
75  rbp_pXpYnZ,
76  rbp_pXnYPz,
77  rbp_pXnYnZ,
78  rbp_nXpYpZ,
79  rbp_nXpYnZ,
80  rbp_nXnYPz,
81  rbp_nXnYnZ,
82  };
83 
84  enum DirectionFlag
85  {
86  dir_center = 0x0000,
87  dir_x = 0x0001,
88  dir_nx = 0x0002,
89  dir_z = 0x0004,
90  dir_nz = 0x0008,
91  dir_y = 0x0010,
92  dir_ny = 0x0020,
93 
94  dir_xy = dir_x | dir_y,
95  dir_xny = dir_x | dir_ny,
96  dir_xz = dir_x | dir_z,
97  dir_xnz = dir_x | dir_nz,
98 
99  dir_nxy = dir_nx | dir_y,
100  dir_nxny = dir_nx | dir_ny,
101  dir_nxz = dir_nx | dir_z,
102  dir_nxnz = dir_nx | dir_nz,
103  };
104 
105  struct PickResult
106  {
107  float X;
108  float Y;
109  float Z;
110  float Distance;
111  uint16_t BlockX;
112  uint16_t BlockY;
113  uint16_t BlockZ;
114  uint16_t Side;
115  };
116 
117  enum BlockRenderMethod
118  {
119  BLOCK_RENDER_FIXED_FUNCTION = 0,
120  BLOCK_RENDER_FAST_SHADER,
121  BLOCK_RENDER_FANCY_SHADER,
122  };
123 
124  enum BlockGroundIDEnum
125  {
126  BLOCK_GROUP_ID_HIGHLIGHT = 0,
127  // scale 1.01
128  BLOCK_GROUP_ID_WIREFRAME,
129  // scale 1
130  BLOCK_GROUP_ID_WIREFRAME1,
131  BLOCK_GROUP_ID_MAX = 10,
132  };
133 
138  {
139  public:
144  static Vector3 ConvertToRealPosition(uint16 x, uint16 y, uint16 z, int nSide = -1);
145  static float ConvertToRealY(uint16 y);
146 
150  static void GetBlockPosBySide(int& x, int& y, int& z, int nSide = 4);
151 
154  static void ConvertToBlockIndex(float x,float y,float z, uint16& idx_x, uint16& idx_y, uint16& idx_z);
155 
158  static Vector3 GetBlockCenter(float x, float y, float z);
159 
162  static Vector3 GetNormalBySide(int nSide);
163 
165  static bool IsOppositeSide(int nSide1, int nSide2);
166 
168  static bool IsCornerSide(int nSide1, int nSide2);
169 
171  static void ConstrainPos(Vector3& vMovePos,const Vector3& vMinPos, const Vector3& vMaxPos);
172  static void ConstrainPos(DVector3& vMovePos, const Vector3& vMinPos, const Vector3& vMaxPos);
173 
175  static void ConstrainPosOuter(Vector3& vMovePos,const Vector3& vMinPos, const Vector3& vMaxPos, float fBoarderDist);
176 
177  static const Int16x3 NeighborOfsTable[27];
178 
180  static const int32_t NeighborLightOrder[];
182  static const int32_t RBP_SixNeighbors[];
183 
184  // x, z direction vectors : east, south, west, north
185  static int32 g_xzDirectionsConst[4][2];
186  };
187 }
3-dimensional vector with double precision.
Definition: ParaDVector3.h:17
Definition: BlockCommon.h:33
different physics engine has different winding order.
Definition: EventBinding.h:32
Standard 3-dimensional vector.
Definition: ParaVector3.h:16
common static functions to block api, mostly standalone math API
Definition: BlockCommon.h:137
A linear, 32-bit/component floating point RGBA color.
Definition: ParaColor.h:12
Definition: BlockCommon.h:105
basic block world coordinate
Definition: BlockCoordinate.h:10