Open Source Tomb Raider Engine
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

global.h 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /*!
  2. * \file include/global.h
  3. * \brief Included everywhere
  4. *
  5. * \author xythobuz
  6. */
  7. #ifndef _GLOBAL_H_
  8. #define _GLOBAL_H_
  9. #include "config.h"
  10. void renderFrame();
  11. typedef enum {
  12. geometryObject = 0,
  13. roomSpriteObject,
  14. roomModelObject,
  15. spriteObject,
  16. meshObject,
  17. modelObject,
  18. WorldObjectCount // Should always be at the end
  19. } WorldObjects;
  20. // Actions that can be bound to a key and sent to the game engine
  21. typedef enum {
  22. menuAction = 0,
  23. debugAction,
  24. consoleAction,
  25. forwardAction,
  26. backwardAction,
  27. leftAction,
  28. rightAction,
  29. jumpAction,
  30. crouchAction,
  31. useAction,
  32. holsterAction,
  33. walkAction,
  34. ActionEventCount // Should always be at the end
  35. } ActionEvents;
  36. // Keys available for binding
  37. typedef enum {
  38. // Keyboard
  39. zeroKey = '0', oneKey = '1', twoKey = '2',
  40. threeKey = '3', fourKey = '4', fiveKey = '5',
  41. sixKey = '6', sevenKey = '7', eightKey = '8',
  42. nineKey = '9', aKey = 'a', bKey = 'b',
  43. cKey = 'c', dKey = 'd', eKey = 'e', fKey = 'f',
  44. gKey = 'g', hKey = 'h', iKey = 'i', jKey = 'j',
  45. kKey = 'k', lKey = 'l', mKey = 'm', nKey = 'n',
  46. oKey = 'o', pKey = 'p', qKey = 'q', rKey = 'r',
  47. sKey = 's', tKey = 't', uKey = 'u', vKey = 'v',
  48. wKey = 'w', xKey = 'x', yKey = 'y', zKey = 'z',
  49. quoteKey, backslashKey, backspaceKey, capslockKey,
  50. commaKey, delKey, upKey, downKey, leftKey, rightKey,
  51. endKey, equalsKey, escapeKey, f1Key, f2Key, f3Key, f4Key, f5Key,
  52. f6Key, f7Key, f8Key, f9Key, f10Key, f11Key, f12Key, backquoteKey,
  53. homeKey, insertKey, leftaltKey, leftctrlKey, leftbracketKey,
  54. leftguiKey, leftshiftKey, minusKey, numlockKey, pagedownKey,
  55. pageupKey, pauseKey, dotKey, rightaltKey, rightctrlKey, enterKey,
  56. rightguiKey, rightbracketKey, rightshiftKey, scrolllockKey,
  57. semicolonKey, slashKey, spaceKey, tabKey,
  58. // Mouse
  59. leftmouseKey, middlemouseKey, rightmouseKey,
  60. fourthmouseKey, fifthmouseKey,
  61. // Game Controller
  62. aButton, bButton, xButton, yButton, backButton, startButton,
  63. guideButton, leftStick, rightStick, leftShoulder, rightShoulder,
  64. padUp, padDown, padLeft, padRight,
  65. leftXAxis, leftYAxis, rightXAxis, rightYAxis, leftTrigger, rightTrigger,
  66. unknownKey // Should always be at the end
  67. } KeyboardButton;
  68. #include <glm/vec2.hpp>
  69. #include <glm/vec3.hpp>
  70. #include <glm/vec4.hpp>
  71. #include <glm/mat4x4.hpp>
  72. // If available, use our own assert that prints the call stack
  73. #if defined(HAVE_EXECINFO_H) && defined(HAVE_BACKTRACE) && defined(HAVE_BACKTRACE_SYMBOLS)
  74. #ifndef NDEBUG
  75. #include <iostream>
  76. #include <execinfo.h>
  77. template<typename T, typename U>
  78. [[noreturn]] void orAssertImplementation(const char* exp, T a, U b, const char* file, int line,
  79. const char* str = nullptr) {
  80. const unsigned int maxSize = 128;
  81. void* callstack[maxSize];
  82. int frames = backtrace(callstack, maxSize);
  83. char** strs = backtrace_symbols(callstack, frames);
  84. std::cout << std::endl << "assertion failed:" << std::endl;
  85. std::cout << "\t" << exp << std::endl;
  86. if (str != nullptr)
  87. std::cout << "\t(" << a << " " << str << " " << b << ")" << std::endl;
  88. std::cout << "in " << file << ":" << line << std::endl << std::endl;
  89. for (int i = 0; i < frames; i++)
  90. std::cout << strs[i] << std::endl;
  91. delete [] strs;
  92. abort();
  93. }
  94. #define orAssert(x) do { \
  95. auto assertEvalTemp = x; \
  96. if (!assertEvalTemp) \
  97. orAssertImplementation(#x, assertEvalTemp, true, __FILE__, __LINE__); \
  98. } while (0)
  99. #define orAssertEqual(x, y) do { \
  100. auto assertEvalTemp = x; \
  101. auto assertEvalTemp2 = y; \
  102. if (assertEvalTemp != assertEvalTemp2) \
  103. orAssertImplementation(#x " == " #y, assertEvalTemp, assertEvalTemp2, \
  104. __FILE__, __LINE__, "!="); \
  105. } while (0)
  106. #define orAssertNotEqual(x, y) do { \
  107. auto assertEvalTemp = x; \
  108. auto assertEvalTemp2 = y; \
  109. if (assertEvalTemp == assertEvalTemp2) \
  110. orAssertImplementation(#x " != " #y, assertEvalTemp, assertEvalTemp2, \
  111. __FILE__, __LINE__, "=="); \
  112. } while (0)
  113. #define orAssertLessThan(x, y) do { \
  114. auto assertEvalTemp = x; \
  115. auto assertEvalTemp2 = y; \
  116. if (assertEvalTemp >= assertEvalTemp2) \
  117. orAssertImplementation(#x " < " #y, assertEvalTemp, assertEvalTemp2, \
  118. __FILE__, __LINE__, ">="); \
  119. } while (0)
  120. #define orAssertLessThanEqual(x, y) do { \
  121. auto assertEvalTemp = x; \
  122. auto assertEvalTemp2 = y; \
  123. if (assertEvalTemp > assertEvalTemp2) \
  124. orAssertImplementation(#x " <= " #y, assertEvalTemp, assertEvalTemp2, \
  125. __FILE__, __LINE__, ">"); \
  126. } while (0)
  127. #define orAssertGreaterThan(x, y) do { \
  128. auto assertEvalTemp = x; \
  129. auto assertEvalTemp2 = y; \
  130. if (assertEvalTemp <= assertEvalTemp2) \
  131. orAssertImplementation(#x " > " #y, assertEvalTemp, assertEvalTemp2, \
  132. __FILE__, __LINE__, "<="); \
  133. } while (0)
  134. #define orAssertGreaterThanEqual(x, y) do { \
  135. auto assertEvalTemp = x; \
  136. auto assertEvalTemp2 = y; \
  137. if (assertEvalTemp < assertEvalTemp2) \
  138. orAssertImplementation(#x " >= " #y, assertEvalTemp, assertEvalTemp2, \
  139. __FILE__, __LINE__, "<"); \
  140. } while (0)
  141. #else // NDEBUG
  142. #define orAssert(x)
  143. #define orAssertEqual(x, y)
  144. #define orAssertNotEqual(x, y)
  145. #define orAssertLessThan(x, y)
  146. #define orAssertLessThanEqual(x, y)
  147. #define orAssertGreaterThan(x, y)
  148. #define orAssertGreaterThanEqual(x, y)
  149. #endif // NDEBUG
  150. #else // EXECINFO
  151. // Fall back to the default C assert
  152. #include <cassert>
  153. #define orAssert(x) assert(x)
  154. #define orAssertEqual(x, y) assert((x) == (y))
  155. #define orAssertNotEqual(x, y) assert((x) != (y))
  156. #define orAssertLessThan(x, y) assert((x) < (y))
  157. #define orAssertLessThanEqual(x, y) assert((x) <= (y))
  158. #define orAssertGreaterThan(x, y) assert((x) > (y))
  159. #define orAssertGreaterThanEqual(x, y) assert((x) >= (y))
  160. #endif // EXECINFO
  161. #endif // _GLOBAL_H_