lua_stack.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 LuaStack::is_vector3(int i)
  11. {
  12. return device()->lua_environment()->is_vector3((Vector3*)get_pointer(i));
  13. }
  14. bool LuaStack::is_quaternion(int i)
  15. {
  16. return device()->lua_environment()->is_quaternion((Quaternion*)get_pointer(i));
  17. }
  18. bool LuaStack::is_matrix4x4(int i)
  19. {
  20. return device()->lua_environment()->is_matrix4x4((Matrix4x4*)get_pointer(i));
  21. }
  22. void LuaStack::check_temporary(int i, Vector3* p)
  23. {
  24. LuaEnvironment* env = device()->lua_environment();
  25. if (!is_pointer(i) || !env->is_vector3(p))
  26. luaL_typerror(L, i, "Vector3");
  27. }
  28. void LuaStack::check_temporary(int i, Quaternion* p)
  29. {
  30. LuaEnvironment* env = device()->lua_environment();
  31. if (!is_pointer(i) || !env->is_quaternion(p))
  32. luaL_typerror(L, i, "Quaternion");
  33. }
  34. void LuaStack::check_temporary(int i, Matrix4x4* p)
  35. {
  36. LuaEnvironment* env = device()->lua_environment();
  37. if (!is_pointer(i) || !env->is_matrix4x4(p))
  38. luaL_typerror(L, i, "Matrix4x4");
  39. }
  40. Vector2 LuaStack::get_vector2(int i)
  41. {
  42. Vector3 v = get_vector3(i);
  43. return vector2(v.x, v.y);
  44. }
  45. Vector3& LuaStack::get_vector3(int i)
  46. {
  47. Vector3* v = (Vector3*)get_pointer(i);
  48. check_temporary(i, v);
  49. return *v;
  50. }
  51. Quaternion& LuaStack::get_quaternion(int i)
  52. {
  53. Quaternion* q = (Quaternion*)get_pointer(i);
  54. check_temporary(i, q);
  55. return *q;
  56. }
  57. Matrix4x4& LuaStack::get_matrix4x4(int i)
  58. {
  59. Matrix4x4* m = (Matrix4x4*)get_pointer(i);
  60. check_temporary(i, m);
  61. return *m;
  62. }
  63. Color4 LuaStack::get_color4(int i)
  64. {
  65. Quaternion q = get_quaternion(i);
  66. return color4(q.x, q.y, q.z, q.w);
  67. }
  68. void LuaStack::push_vector2(const Vector2& v)
  69. {
  70. push_vector3(vector3(v.x, v.y, 0.0f));
  71. }
  72. void LuaStack::push_vector3(const Vector3& v)
  73. {
  74. lua_pushlightuserdata(L, device()->lua_environment()->next_vector3(v));
  75. }
  76. void LuaStack::push_quaternion(const Quaternion& q)
  77. {
  78. lua_pushlightuserdata(L, device()->lua_environment()->next_quaternion(q));
  79. }
  80. void LuaStack::push_matrix4x4(const Matrix4x4& m)
  81. {
  82. lua_pushlightuserdata(L, device()->lua_environment()->next_matrix4x4(m));
  83. }
  84. } // namespace crown