Types.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. /* Copyright (c) 2002-2012 Croteam Ltd.
  2. This program is free software; you can redistribute it and/or modify
  3. it under the terms of version 2 of the GNU General Public License as published by
  4. the Free Software Foundation
  5. This program is distributed in the hope that it will be useful,
  6. but WITHOUT ANY WARRANTY; without even the implied warranty of
  7. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  8. GNU General Public License for more details.
  9. You should have received a copy of the GNU General Public License along
  10. with this program; if not, write to the Free Software Foundation, Inc.,
  11. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
  12. #ifndef SE_INCL_TYPES_H
  13. #define SE_INCL_TYPES_H
  14. #ifdef PRAGMA_ONCE
  15. #pragma once
  16. #endif
  17. #include <Engine/Base/Base.h>
  18. #include <Engine/Graphics/gl_types.h>
  19. typedef signed long int SLONG;
  20. typedef signed short int SWORD;
  21. typedef signed char SBYTE;
  22. typedef signed int SINT;
  23. typedef unsigned long int ULONG;
  24. typedef unsigned short int UWORD;
  25. typedef unsigned char UBYTE;
  26. typedef unsigned int UINT;
  27. #ifdef PLATFORM_UNIX /* rcg10042001 */
  28. #define __forceinline inline
  29. #if (!defined MAX_PATH)
  30. #define MAX_PATH 256
  31. #endif
  32. typedef long long __int64;
  33. typedef unsigned long int DWORD;
  34. typedef signed long int LONG;
  35. typedef void *HWND; /* !!! FIXME this sucks. */
  36. typedef void *HINSTANCE; /* !!! FIXME this sucks. */
  37. typedef void *HGLRC; /* !!! FIXME this sucks. */
  38. typedef ULONG COLORREF; /* !!! FIXME this sucks. */
  39. typedef struct
  40. {
  41. LONG x;
  42. LONG y;
  43. } POINT;
  44. typedef struct
  45. {
  46. LONG left;
  47. LONG top;
  48. LONG right;
  49. LONG bottom;
  50. } RECT;
  51. #endif
  52. #define MAX_SLONG ((SLONG)0x7FFFFFFFL)
  53. #define MAX_SWORD ((UWORD)0x7FFF)
  54. #define MAX_SBYTE ((SBYTE)0x7F)
  55. #define MIN_SLONG ((SLONG)0x80000000L)
  56. #define MIN_SWORD ((SWORD)0x8000)
  57. #define MIN_SBYTE ((SBYTE)0x80)
  58. #define MIN_ULONG ((ULONG)0x00000000L)
  59. #define MIN_UWORD ((UWORD)0x0000)
  60. #define MIN_UBYTE ((UBYTE)0x00)
  61. #define MAX_ULONG ((ULONG)0xFFFFFFFFL)
  62. #define MAX_UWORD ((UWORD)0xFFFF)
  63. #define MAX_UBYTE ((UBYTE)0xFF)
  64. typedef int BOOL; // this is for TRUE/FALSE
  65. typedef long int RESULT; // for error codes
  66. typedef long int INDEX; // for indexed values and quantities
  67. #define FALSE 0
  68. #define TRUE 1
  69. #define NONE 0
  70. #define NOTHING ((void) 0)
  71. #define FOREVER for(;;)
  72. #define DECLARE_NOCOPYING(classname) \
  73. classname(const classname &c); \
  74. classname &operator=(const classname &c);
  75. #define IMPLEMENT_NOCOPYING(classname) \
  76. classname::classname(const classname &c) { ASSERT(FALSE); }; \
  77. classname &classname::operator=(const classname &c){ ASSERT(FALSE); return *this; };
  78. // standard angles
  79. #define ANGLE_0 ( 0.0f)
  80. #define ANGLE_90 ( 90.0f)
  81. #define ANGLE_180 (180.0f)
  82. #define ANGLE_270 (270.0f)
  83. #define ANGLE_360 (360.0f)
  84. // you need <stddef.h> for this!
  85. #define structptr(structure, member, ptr) \
  86. ( (struct structure *) ( ((UBYTE *)(ptr)) - \
  87. offsetof(struct structure, member)) )
  88. // standard types
  89. // simple types
  90. typedef SLONG PIX; // pixel coordinates
  91. typedef SLONG TEX; // texel coordinates
  92. typedef SLONG MEX; // texels in mip-level 0
  93. typedef float FLOAT;
  94. typedef double DOUBLE;
  95. typedef float ANGLE;
  96. typedef float TIME;
  97. typedef FLOAT RANGE;
  98. typedef ULONG COLOR; // color is always in 32 bit true-color format
  99. // macros for windows/croteam true color conversion
  100. #define CLRF_CLR(clr) ( ((clr & 0xff000000) >> 24) | \
  101. ((clr & 0x00ff0000) >> 8) | \
  102. ((clr & 0x0000ff00) << 8))
  103. #define CLR_CLRF(clrref) ( ((clrref & 0x000000ff) << 24) | \
  104. ((clrref & 0x0000ff00) << 8) | \
  105. ((clrref & 0x00ff0000) >> 8))
  106. // z-buffer depth constants
  107. #define ZBUF_FRONT (0.0f)
  108. #define ZBUF_BACK (1.0f)
  109. // alpha factor constants
  110. #define CT_OPAQUE MAX_UBYTE
  111. #define CT_TRANSPARENT MIN_UBYTE
  112. // line types (masks)
  113. #define _FULL_ 0xFFFFFFFF
  114. #define _SYMMET16_ 0xFF88FF88
  115. #define _SYMMET32_ 0xFFFF0180
  116. #define _POINT_ 0xAAAAAAAA
  117. #define _DOT2_ 0xCCCCCCCC
  118. #define _DOT4_ 0xF0F0F0F0
  119. #define _DOT8_ 0xFF00FF00
  120. #define _DOT16_ 0xFFFF0000
  121. #define _TY31_ 0xEEEEEEEE
  122. #define _TY62_ 0xFCFCFCFC
  123. #define _TY124_ 0xFFF0FFF0
  124. #define _TY13_ 0x88888888
  125. #define _TY26_ 0xC0C0C0C0
  126. #define _TY412_ 0xF000F000
  127. // some mexels constants
  128. #define MAX_MEX_LOG2 10
  129. #define MIN_MEX_LOG2 0
  130. #define MAX_MEX (1L<<MAX_MEX_LOG2)
  131. #define MIN_MEX (1L<<MIN_MEX_LOG2)
  132. // macro for converting mexels to meters
  133. #define METERS_MEX(mex) ((FLOAT)(((FLOAT)mex)/MAX_MEX))
  134. #define MEX_METERS(meters) ((MEX)(meters*MAX_MEX))
  135. #define ARRAYCOUNT(array) (sizeof(array)/sizeof((array)[0]))
  136. // sound volume constants
  137. #define SL_VOLUME_MIN (0.0f)
  138. #define SL_VOLUME_MAX (4.0f)
  139. inline DOUBLE FLOATtoDOUBLE(const FLOAT f) { return DOUBLE(f); }
  140. inline FLOAT DOUBLEtoFLOAT(const DOUBLE d) { return FLOAT(d); }
  141. inline float UpperLimit(float x) { return +3E38f; }
  142. inline float LowerLimit(float x) { return -3E38f; }
  143. inline double UpperLimit(double x) { return +1E308; }
  144. inline double LowerLimit(double x) { return -1E308; }
  145. inline SLONG UpperLimit(SLONG x) { return MAX_SLONG; }
  146. inline SLONG LowerLimit(SLONG x) { return MIN_SLONG; }
  147. inline SWORD UpperLimit(SWORD x) { return MAX_SWORD; }
  148. inline SWORD LowerLimit(SWORD x) { return MIN_SWORD; }
  149. // class predeclarations
  150. class CAnimData;
  151. class CAnimObject;
  152. class CAnimSet;
  153. class CAnyProjection3D;
  154. class CBrush3D;
  155. class CBrushArchive;
  156. class CBrushEdge;
  157. class CBrushEdge;
  158. class CBrushMip;
  159. class CBrushMip;
  160. class CBrushPlane;
  161. class CBrushPolygon;
  162. class CBrushPolygonEdge;
  163. class CBrushSector;
  164. class CBrushShadowLayer;
  165. class CBrushShadowMap;
  166. class CBrushTexture;
  167. class CBrushTexture;
  168. class CBrushVertex;
  169. class CBrushVertex;
  170. class CTerrain;
  171. class CTerrainTile;
  172. class CTerrainLayer;
  173. class CTerrainArchive;
  174. class CCastRay;
  175. class CChangeable;
  176. class CChangeableRT;
  177. class CClipMove;
  178. class CClipTest;
  179. class CCollisionInfo;
  180. class CCompressor;
  181. class CConsole;
  182. class CContentType;
  183. class CDisplayMode;
  184. class CDLLEntityClass;
  185. class CDrawPort;
  186. class CEntity;
  187. class CEntityPointer;
  188. class CEntityPropertyEnumType;
  189. class CEntityClass;
  190. class CFieldSettings;
  191. class CFontData;
  192. class CFontCharData;
  193. class CGfxLibrary;
  194. class CImageInfo;
  195. class CIsometricProjection3D;
  196. class CLastPositions;
  197. class CLayerMaker;
  198. class CLayerMixer;
  199. class CLightSource;
  200. class CListHead;
  201. class CListNode;
  202. class CLiveEntity;
  203. class CMesh;
  204. class CMessageDispatcher;
  205. class CModelInstance;
  206. class CModelObject;
  207. class CModelData;
  208. class CMovableBrushEntity;
  209. class CMovableEntity;
  210. class CMovableModelEntity;
  211. class CNetworkMessage;
  212. class CNetworkNode;
  213. class CNetworkStream;
  214. class CNetworkStreamBlock;
  215. class CPlacement3D;
  216. class CPlanarGradients;
  217. class CProjection3D;
  218. class CPlayerAction;
  219. class CPlayerBuffer;
  220. class CPlayerCharacter;
  221. class CPlayerEntity;
  222. class CPlayerSource;
  223. class CPlayerTarget;
  224. class CRationalEntity;
  225. class CParallelProjection3D;
  226. class CPerspectiveProjection3D;
  227. class CRaster;
  228. class CRelationDst;
  229. class CRelationLnk;
  230. class CRelationSrc;
  231. class CRenderer;
  232. class CRenderer;
  233. class CSCapeLibrary;
  234. class CSCapeTimerHandler;
  235. class CScreenEdge;
  236. class CScreenEdge;
  237. class CScreenPolygon;
  238. class CScreenPolygon;
  239. class CSerial;
  240. class CServer;
  241. class CSessionState;
  242. class CShadingInfo;
  243. class CShadowMap;
  244. class CSimpleProjection3D;
  245. class CSimpleProjection3D_DOUBLE;
  246. class CShadowMapMaker;
  247. class CShell;
  248. class CShellSymbol;
  249. class CSkeleton;
  250. class CStaticLightSource;
  251. class CSoundData;
  252. class CSoundLibrary;
  253. class CSoundObject;
  254. class CSoundListener;
  255. class CSoundParameters;
  256. class CSoundParameters3D;
  257. class CSurfaceType;
  258. class CTCriticalSection;
  259. class CTextureData;
  260. class CTextureObject;
  261. class CTFileName;
  262. class CTFileStream;
  263. class CTMemoryStream;
  264. class CTSingleLock;
  265. class CTStream;
  266. class CTString;
  267. class CTimer;
  268. class CTimerHandler;
  269. class CTimerValue;
  270. class CObject3D;
  271. class CObjectSector;
  272. class CObjectPolygon;
  273. class CObjectVertex;
  274. class CObjectPlane;
  275. class CObjectMaterial;
  276. class CUpdateable;
  277. class CUpdateableRT;
  278. class CViewPort;
  279. class CWorkingVertex;
  280. class CWorkingPlane;
  281. class CWorkingEdge;
  282. class CWorld;
  283. // template class predeclarations
  284. template<class Type, int iOffset> class CListIter;
  285. template<class Type> class CDynamicArray;
  286. template<class Type> class CDynamicStackArray;
  287. template<class Type> class CDynamicArrayIterator;
  288. template<class Type> class CStaticArray;
  289. template<class Type> class CStaticStackArray;
  290. template<class Type> class CStaticArrayIterator;
  291. template<class Type> class CLinearAllocator;
  292. template<class Type> class CDynamicContainer;
  293. template<class Type, int iRows, int iColumns> class Matrix;
  294. template<class Type, int iDimensions> class AABBox;
  295. template<class Type, int iDimensions> class Vector;
  296. template<class Type, int iDimensions> class Plane;
  297. template<class Type> class OBBox;
  298. template<class Type> class Quaternion;
  299. template<int iInt, int iFrac> class FixInt;
  300. template<class Type, int iDimensions> class BSPVertex;
  301. template<class Type, int iDimensions> class BSPVertexContainer;
  302. template<class Type, int iDimensions> class BSPEdge;
  303. template<class Type, int iDimensions> class BSPNode;
  304. template<class Type, int iDimensions> class BSPPolygon;
  305. template<class Type, int iDimensions> class BSPTree;
  306. template<class Type, int iDimensions> class BSPCutter;
  307. typedef FixInt<16,16> FIX16_16;
  308. // vectors
  309. typedef Vector<PIX, 2> PIX2D;
  310. typedef Vector<MEX, 2> MEX2D;
  311. typedef Vector<PIX, 3> PIX3D;
  312. typedef Vector<ANGLE, 3> ANGLE3D;
  313. typedef Vector<FLOAT, 2> FLOAT2D;
  314. typedef Vector<FLOAT, 3> FLOAT3D;
  315. typedef Vector<DOUBLE, 2> DOUBLE2D;
  316. typedef Vector<DOUBLE, 3> DOUBLE3D;
  317. // planes
  318. typedef Plane<FLOAT, 3> FLOATplane3D;
  319. typedef Plane<DOUBLE, 3> DOUBLEplane3D;
  320. // axis-aligned bounding boxes
  321. typedef AABBox<MEX, 2> MEXaabbox2D;
  322. typedef AABBox<PIX, 2> PIXaabbox2D;
  323. typedef AABBox<FLOAT, 2> FLOATaabbox2D;
  324. typedef AABBox<FLOAT, 3> FLOATaabbox3D;
  325. typedef AABBox<DOUBLE, 2> DOUBLEaabbox2D;
  326. typedef AABBox<DOUBLE, 3> DOUBLEaabbox3D;
  327. // oriented bounding boxes
  328. typedef OBBox<FLOAT> FLOATobbox3D;
  329. typedef OBBox<DOUBLE> DOUBLEobbox3D;
  330. // matrices
  331. typedef Matrix<PIX, 2, 2> PIXmatrix2D;
  332. typedef Matrix<PIX, 3, 3> PIXmatrix3D;
  333. typedef Matrix<ANGLE, 3, 3> ANGLEmatrix3D;
  334. typedef Matrix<FLOAT, 2, 2> FLOATmatrix2D;
  335. typedef Matrix<FLOAT, 3, 3> FLOATmatrix3D;
  336. typedef Matrix<DOUBLE, 3, 3> DOUBLEmatrix3D;
  337. typedef FLOAT Matrix12[12];
  338. // quaternions
  339. typedef Quaternion<FLOAT> FLOATquat3D;
  340. typedef Quaternion<DOUBLE> DOUBLEquat3D;
  341. // BSP types
  342. typedef BSPVertex<DOUBLE, 3> DOUBLEbspvertex3D;
  343. typedef BSPVertexContainer<DOUBLE, 3> DOUBLEbspvertexcontainer3D;
  344. typedef BSPEdge<DOUBLE, 3> DOUBLEbspedge3D;
  345. typedef BSPNode<DOUBLE, 3> DOUBLEbspnode3D;
  346. typedef BSPPolygon<DOUBLE, 3> DOUBLEbsppolygon3D;
  347. typedef BSPTree<DOUBLE, 3> DOUBLEbsptree3D;
  348. typedef BSPCutter<DOUBLE, 3> DOUBLEbspcutter3D;
  349. typedef BSPVertex<FLOAT, 3> FLOATbspvertex3D;
  350. typedef BSPVertexContainer<FLOAT, 3> FLOATbspvertexcontainer3D;
  351. typedef BSPEdge<FLOAT, 3> FLOATbspedge3D;
  352. typedef BSPNode<FLOAT, 3> FLOATbspnode3D;
  353. typedef BSPPolygon<FLOAT, 3> FLOATbsppolygon3D;
  354. typedef BSPTree<FLOAT, 3> FLOATbsptree3D;
  355. typedef BSPCutter<FLOAT, 3> FLOATbspcutter3D;
  356. // general clearing functions
  357. template<class cType>
  358. inline void Clear(cType &t) { t.cType::Clear(); };
  359. // specific clearing functions for built-in types
  360. inline void Clear(signed long int sli) {};
  361. inline void Clear(unsigned long int uli) {};
  362. inline void Clear(int i) {};
  363. inline void Clear(float i) {};
  364. inline void Clear(double i) {};
  365. inline void Clear(void *pv) {};
  366. #define SYMBOLLOCATOR(symbol)
  367. #endif /* include-once check. */