lldefs.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:7k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lldefs.h
  3.  * @brief Various generic constant definitions.
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLDEFS_H
  33. #define LL_LLDEFS_H
  34. #include "stdtypes.h"
  35. // Often used array indices
  36. const U32 VX = 0;
  37. const U32 VY = 1;
  38. const U32 VZ = 2;
  39. const U32 VW = 3;
  40. const U32 VS = 3;
  41. const U32 VRED = 0;
  42. const U32 VGREEN = 1;
  43. const U32 VBLUE = 2;
  44. const U32 VALPHA = 3;
  45. const U32 INVALID_DIRECTION = 0xFFFFFFFF;
  46. const U32 EAST = 0;
  47. const U32 NORTH = 1;
  48. const U32 WEST = 2;
  49. const U32 SOUTH = 3;
  50. const U32 NORTHEAST = 4;
  51. const U32 NORTHWEST = 5;
  52. const U32 SOUTHWEST = 6;
  53. const U32 SOUTHEAST = 7;
  54. const U32 MIDDLE = 8;
  55. const U8 EAST_MASK = 0x1<<EAST;
  56. const U8 NORTH_MASK = 0x1<<NORTH;
  57. const U8 WEST_MASK = 0x1<<WEST;
  58. const U8 SOUTH_MASK = 0x1<<SOUTH;
  59. const U8 NORTHEAST_MASK = NORTH_MASK | EAST_MASK;
  60. const U8 NORTHWEST_MASK = NORTH_MASK | WEST_MASK;
  61. const U8 SOUTHWEST_MASK = SOUTH_MASK | WEST_MASK;
  62. const U8 SOUTHEAST_MASK = SOUTH_MASK | EAST_MASK;
  63. const U32 gDirOpposite[8] = {2, 3, 0, 1, 6, 7, 4, 5};
  64. const U32 gDirAdjacent[8][2] =  {
  65. {4, 7},
  66. {4, 5},
  67. {5, 6},
  68. {6, 7},
  69. {0, 1},
  70. {1, 2},
  71. {2, 3},
  72. {0, 3}
  73. };
  74. // Magnitude along the x and y axis
  75. const S32 gDirAxes[8][2] = {
  76. { 1, 0}, // east
  77. { 0, 1}, // north
  78. {-1, 0}, // west
  79. { 0,-1}, // south
  80. { 1, 1}, // ne
  81. {-1, 1}, // nw
  82. {-1,-1}, // sw
  83. { 1,-1}, // se
  84. };
  85. const S32 gDirMasks[8] = { 
  86. EAST_MASK,
  87. NORTH_MASK,
  88. WEST_MASK,
  89. SOUTH_MASK,
  90. NORTHEAST_MASK,
  91. NORTHWEST_MASK,
  92. SOUTHWEST_MASK,
  93. SOUTHEAST_MASK
  94. };
  95. // Sides of a box...
  96. //                  . Z      __.Y
  97. //                 /|        /|       0 = NO_SIDE
  98. //                  |        /         1 = FRONT_SIDE   = +x
  99. //           +------|-----------+      2 = BACK_SIDE    = -x
  100. //          /|      |/     /   /|      3 = LEFT_SIDE    = +y
  101. //         / |     -5-   |/   / |      4 = RIGHT_SIDE   = -y
  102. //        /  |     /|   -3-  /  |      5 = TOP_SIDE     = +z
  103. //       +------------------+   |      6 = BOTTOM_SIDE  = -z
  104. //       |   |      |  /    |   |
  105. //       | |/|      | /     | |/|                   
  106. //       | 2 |    | *-------|-1--------> X           
  107. //       |/| |   -4-        |/| |                  
  108. //       |   +----|---------|---+
  109. //       |  /        /      |  /
  110. //       | /       -6-      | /
  111. //       |/        /        |/ 
  112. //       +------------------+
  113. const U32 NO_SIDE  = 0;
  114. const U32 FRONT_SIDE  = 1;
  115. const U32 BACK_SIDE  = 2;
  116. const U32 LEFT_SIDE  = 3;
  117. const U32 RIGHT_SIDE  = 4;
  118. const U32 TOP_SIDE  = 5;
  119. const U32 BOTTOM_SIDE  = 6;
  120. const U8 LL_SOUND_FLAG_NONE =         0x0;
  121. const U8 LL_SOUND_FLAG_LOOP =         1<<0;
  122. const U8 LL_SOUND_FLAG_SYNC_MASTER =  1<<1;
  123. const U8 LL_SOUND_FLAG_SYNC_SLAVE =   1<<2;
  124. const U8 LL_SOUND_FLAG_SYNC_PENDING = 1<<3;
  125. const U8 LL_SOUND_FLAG_QUEUE =        1<<4;
  126. const U8 LL_SOUND_FLAG_STOP =         1<<5;
  127. const U8 LL_SOUND_FLAG_SYNC_MASK = LL_SOUND_FLAG_SYNC_MASTER | LL_SOUND_FLAG_SYNC_SLAVE | LL_SOUND_FLAG_SYNC_PENDING;
  128. //
  129. // *NOTE: These values may be used as hard-coded numbers in scanf() variants.
  130. //
  131. // --------------
  132. // DO NOT CHANGE.
  133. // --------------
  134. //
  135. const U32 LL_MAX_PATH = 1024; // buffer size of maximum path + filename string length
  136. // For strings we send in messages
  137. const U32 STD_STRING_BUF_SIZE = 255; // Buffer size
  138. const U32 STD_STRING_STR_LEN = 254; // Length of the string (not including )
  139. // *NOTE: This value is used as hard-coded numbers in scanf() variants.
  140. // DO NOT CHANGE.
  141. const U32 MAX_STRING = STD_STRING_BUF_SIZE; // Buffer size
  142. const U32 MAXADDRSTR = 17; // 123.567.901.345 = 15 chars +  + 1 for good luck
  143. // C++ is our friend. . . use template functions to make life easier!
  144. // specific inlines for basic types
  145. //
  146. // defined for all:
  147. //   llmin(a,b)
  148. //   llmax(a,b)
  149. //   llclamp(a,minimum,maximum)
  150. //
  151. // defined for F32, F64:
  152. //   llclampf(a)     // clamps a to [0.0 .. 1.0]
  153. //
  154. // defined for U16, U32, U64, S16, S32, S64, :
  155. //   llclampb(a)     // clamps a to [0 .. 255]
  156. //       
  157. template <class LLDATATYPE> 
  158. inline LLDATATYPE llmax(const LLDATATYPE& d1, const LLDATATYPE& d2)
  159. {
  160. return (d1 > d2) ? d1 : d2;
  161. }
  162. template <class LLDATATYPE> 
  163. inline LLDATATYPE llmax(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATATYPE& d3)
  164. {
  165. LLDATATYPE r = llmax(d1,d2);
  166. return llmax(r, d3);
  167. }
  168. template <class LLDATATYPE> 
  169. inline LLDATATYPE llmax(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATATYPE& d3, const LLDATATYPE& d4)
  170. {
  171. LLDATATYPE r1 = llmax(d1,d2);
  172. LLDATATYPE r2 = llmax(d3,d4);
  173. return llmax(r1, r2);
  174. }
  175. template <class LLDATATYPE> 
  176. inline LLDATATYPE llmin(const LLDATATYPE& d1, const LLDATATYPE& d2)
  177. {
  178. return (d1 < d2) ? d1 : d2;
  179. }
  180. template <class LLDATATYPE> 
  181. inline LLDATATYPE llmin(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATATYPE& d3)
  182. {
  183. LLDATATYPE r = llmin(d1,d2);
  184. return (r < d3 ? r : d3);
  185. }
  186. template <class LLDATATYPE> 
  187. inline LLDATATYPE llmin(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATATYPE& d3, const LLDATATYPE& d4)
  188. {
  189. LLDATATYPE r1 = llmin(d1,d2);
  190. LLDATATYPE r2 = llmin(d3,d4);
  191. return llmin(r1, r2);
  192. }
  193. template <class LLDATATYPE> 
  194. inline LLDATATYPE llclamp(const LLDATATYPE& a, const LLDATATYPE& minval, const LLDATATYPE& maxval)
  195. {
  196. if ( a < minval )
  197. {
  198. return minval;
  199. }
  200. else if ( a > maxval )
  201. {
  202. return maxval;
  203. }
  204. return a;
  205. }
  206. template <class LLDATATYPE> 
  207. inline LLDATATYPE llclampf(const LLDATATYPE& a)
  208. {
  209. return llmin(llmax(a, (LLDATATYPE)0), (LLDATATYPE)1);
  210. }
  211. template <class LLDATATYPE> 
  212. inline LLDATATYPE llclampb(const LLDATATYPE& a)
  213. {
  214. return llmin(llmax(a, (LLDATATYPE)0), (LLDATATYPE)255);
  215. }
  216. #endif // LL_LLDEFS_H