lua_stack.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * Copyright (c) 2012-2020 Daniele Bartolini and individual contributors.
  3. * License: https://github.com/dbartolini/crown/blob/master/LICENSE
  4. */
  5. #include "device/device.h"
  6. #include "lua/lua_environment.h"
  7. #include "lua/lua_stack.inl"
  8. namespace crown
  9. {
  10. bool LuaStack::is_vector3(int i)
  11. {
  12. return device()->_lua_environment->is_vector3((Vector3*)lua_touserdata(L, i));
  13. }
  14. bool LuaStack::is_quaternion(int i)
  15. {
  16. return device()->_lua_environment->is_quaternion((Quaternion*)lua_touserdata(L, i));
  17. }
  18. bool LuaStack::is_matrix4x4(int i)
  19. {
  20. return device()->_lua_environment->is_matrix4x4((Matrix4x4*)lua_touserdata(L, i));
  21. }
  22. #if CROWN_DEBUG
  23. Vector3* LuaStack::check_temporary(int i, const Vector3* ptr)
  24. {
  25. LuaEnvironment* env = device()->_lua_environment;
  26. if (CE_UNLIKELY(!env->is_vector3(ptr)))
  27. {
  28. luaL_typerror(L, i, "Vector3");
  29. CE_UNREACHABLE();
  30. }
  31. return env->check_valid(ptr);
  32. }
  33. Quaternion* LuaStack::check_temporary(int i, const Quaternion* ptr)
  34. {
  35. LuaEnvironment* env = device()->_lua_environment;
  36. if (CE_UNLIKELY(!env->is_quaternion(ptr)))
  37. {
  38. luaL_typerror(L, i, "Quaternion");
  39. CE_UNREACHABLE();
  40. }
  41. return env->check_valid(ptr);
  42. }
  43. Matrix4x4* LuaStack::check_temporary(int i, const Matrix4x4* ptr)
  44. {
  45. LuaEnvironment* env = device()->_lua_environment;
  46. if (CE_UNLIKELY(!env->is_matrix4x4(ptr)))
  47. {
  48. luaL_typerror(L, i, "Matrix4x4");
  49. CE_UNREACHABLE();
  50. }
  51. return env->check_valid(ptr);
  52. }
  53. #endif // CROWN_DEBUG
  54. void LuaStack::push_vector3(const Vector3& v)
  55. {
  56. lua_pushlightuserdata(L, device()->_lua_environment->next_vector3(v));
  57. }
  58. void LuaStack::push_quaternion(const Quaternion& q)
  59. {
  60. lua_pushlightuserdata(L, device()->_lua_environment->next_quaternion(q));
  61. }
  62. void LuaStack::push_matrix4x4(const Matrix4x4& m)
  63. {
  64. lua_pushlightuserdata(L, device()->_lua_environment->next_matrix4x4(m));
  65. }
  66. } // namespace crown