lua_stack.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * Copyright (c) 2012-2015 Daniele Bartolini and individual contributors.
  3. * License: https://github.com/taylor001/crown/blob/master/LICENSE
  4. */
  5. #include "lua_stack.h"
  6. #include "lua_environment.h"
  7. #include "device.h"
  8. namespace crown
  9. {
  10. bool is_vector3(int i) { return device()->lua_environment()->is_vector3(i); }
  11. bool is_quaternion(int i) { return device()->lua_environment()->is_quaternion(i); }
  12. bool is_matrix4x4(int i) { return device()->lua_environment()->is_matrix4x4(i); }
  13. Vector2 LuaStack::get_vector2(int i)
  14. {
  15. void* v = CHECKLIGHTDATA(L, i, is_vector3, "Vector2");
  16. Vector3& vv = *(Vector3*)v;
  17. return vector2(vv.x, vv.y);
  18. }
  19. Vector3& LuaStack::get_vector3(int i)
  20. {
  21. void* v = CHECKLIGHTDATA(L, i, is_vector3, "Vector3");
  22. return *(Vector3*)v;
  23. }
  24. Quaternion& LuaStack::get_quaternion(int i)
  25. {
  26. void* q = CHECKLIGHTDATA(L, i, is_quaternion, "Quaternion");
  27. return *(Quaternion*)q;
  28. }
  29. Matrix4x4& LuaStack::get_matrix4x4(int i)
  30. {
  31. void* m = CHECKLIGHTDATA(L, i, is_matrix4x4, "Matrix4x4");
  32. return *(Matrix4x4*)m;
  33. }
  34. Color4 LuaStack::get_color4(int i)
  35. {
  36. // Color4 represented as Quaternion
  37. void* c = CHECKLIGHTDATA(L, i, is_quaternion, "Color4");
  38. Quaternion& q = *(Quaternion*)c;
  39. return color4(q.x, q.y, q.z, q.w);
  40. }
  41. void LuaStack::push_vector2(const Vector2& v)
  42. {
  43. push_vector3(vector3(v.x, v.y, 0.0f));
  44. }
  45. void LuaStack::push_vector3(const Vector3& v)
  46. {
  47. lua_pushlightuserdata(L, device()->lua_environment()->next_vector3(v));
  48. luaL_getmetatable(L, "Lightuserdata_mt");
  49. lua_setmetatable(L, -2);
  50. }
  51. void LuaStack::push_quaternion(const Quaternion& q)
  52. {
  53. lua_pushlightuserdata(L, device()->lua_environment()->next_quaternion(q));
  54. luaL_getmetatable(L, "Lightuserdata_mt");
  55. lua_setmetatable(L, -2);
  56. }
  57. void LuaStack::push_matrix4x4(const Matrix4x4& m)
  58. {
  59. lua_pushlightuserdata(L, device()->lua_environment()->next_matrix4x4(m));
  60. luaL_getmetatable(L, "Lightuserdata_mt");
  61. lua_setmetatable(L, -2);
  62. }
  63. } // namespace crown