LuaStack.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #include "LuaStack.h"
  2. #include <cassert>
  3. namespace crown
  4. {
  5. //-------------------------------------------------------
  6. LuaStack::LuaStack(lua_State* L)
  7. {
  8. m_state = L;
  9. }
  10. //-------------------------------------------------------
  11. void LuaStack::push_bool(bool value)
  12. {
  13. lua_pushboolean(m_state, value);
  14. }
  15. //-------------------------------------------------------
  16. void LuaStack::push_int(int32_t value)
  17. {
  18. lua_pushinteger(m_state, value);
  19. }
  20. //-------------------------------------------------------
  21. void LuaStack::push_float(float value)
  22. {
  23. lua_pushnumber(m_state, value);
  24. }
  25. //-------------------------------------------------------
  26. void LuaStack::push_string(const char* str, size_t len)
  27. {
  28. lua_pushlstring(m_state, str, len);
  29. }
  30. //-------------------------------------------------------
  31. void LuaStack::push_vec2(Vec2* v)
  32. {
  33. assert(v >= &vec2_buffer[0] && v <= &vec2_buffer[LUA_VEC2_BUFFER_SIZE-1]);
  34. lua_pushlightuserdata(m_state, v);
  35. }
  36. void LuaStack::push_vec3(Vec3* v)
  37. {
  38. assert(v >= &vec3_buffer[0] && v <= &vec3_buffer[LUA_VEC3_BUFFER_SIZE-1]);
  39. lua_pushlightuserdata(m_state, v);
  40. }
  41. void LuaStack::push_mat4(Mat4* m)
  42. {
  43. assert(m >= &mat4_buffer[0] && m <= &mat4_buffer[LUA_MAT4_BUFFER_SIZE-1]);
  44. lua_pushlightuserdata(m_state, m);
  45. }
  46. void LuaStack::push_quat(Quat* q)
  47. {
  48. assert(q >= &quat_buffer[0] && q <= &quat_buffer[LUA_MAT4_BUFFER_SIZE-1]);
  49. lua_pushlightuserdata(m_state, q);
  50. }
  51. //-------------------------------------------------------
  52. bool LuaStack::get_bool(int32_t index)
  53. {
  54. return (bool) luaL_checkinteger(m_state, index);
  55. }
  56. //-------------------------------------------------------
  57. int32_t LuaStack::get_int(int32_t index)
  58. {
  59. return luaL_checkinteger(m_state, index);
  60. }
  61. //-------------------------------------------------------
  62. float LuaStack::get_float(int32_t index)
  63. {
  64. return luaL_checknumber(m_state, index);
  65. }
  66. //-------------------------------------------------------
  67. const char* LuaStack::get_string(int32_t index)
  68. {
  69. return luaL_checkstring(m_state, index);
  70. }
  71. Vec2* LuaStack::get_vec2(int32_t index)
  72. {
  73. assert(lua_islightuserdata(m_state, index));
  74. Vec2* v = (Vec2*)lua_touserdata(m_state, index);
  75. assert(v >= &vec2_buffer[0] && v <= &vec2_buffer[LUA_VEC2_BUFFER_SIZE-1]);
  76. return v;
  77. }
  78. //-------------------------------------------------------
  79. Vec3* LuaStack::get_vec3(int32_t index)
  80. {
  81. assert(lua_islightuserdata(m_state, index));
  82. Vec3* v = (Vec3*)lua_touserdata(m_state, index);
  83. assert(v >= &vec3_buffer[0] && v <= &vec3_buffer[LUA_VEC3_BUFFER_SIZE-1]);
  84. return v;
  85. }
  86. //-------------------------------------------------------
  87. Mat4* LuaStack::get_mat4(int32_t index)
  88. {
  89. assert(lua_islightuserdata(m_state, index));
  90. Mat4* m = (Mat4*)lua_touserdata(m_state, index);
  91. assert(m >= &mat4_buffer[0] && m <= &mat4_buffer[LUA_MAT4_BUFFER_SIZE-1]);
  92. return m;
  93. }
  94. //-------------------------------------------------------
  95. Quat* LuaStack::get_quat(int32_t index)
  96. {
  97. assert(lua_islightuserdata(m_state, index));
  98. Quat* q = (Quat*)lua_touserdata(m_state, index);
  99. assert(q >= &quat_buffer[0] && q <= &quat_buffer[LUA_QUAT_BUFFER_SIZE-1]);
  100. return q;
  101. }
  102. } // namespace crown