lua_stack.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * Copyright (c) 2012-2024 Daniele Bartolini et al.
  3. * SPDX-License-Identifier: MIT
  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. luaL_typerror(L, i, "Vector3");
  28. CE_UNREACHABLE();
  29. }
  30. return env->check_valid(ptr);
  31. }
  32. Quaternion *LuaStack::check_temporary(int i, const Quaternion *ptr)
  33. {
  34. LuaEnvironment *env = device()->_lua_environment;
  35. if (CE_UNLIKELY(!env->is_quaternion(ptr))) {
  36. luaL_typerror(L, i, "Quaternion");
  37. CE_UNREACHABLE();
  38. }
  39. return env->check_valid(ptr);
  40. }
  41. Matrix4x4 *LuaStack::check_temporary(int i, const Matrix4x4 *ptr)
  42. {
  43. LuaEnvironment *env = device()->_lua_environment;
  44. if (CE_UNLIKELY(!env->is_matrix4x4(ptr))) {
  45. luaL_typerror(L, i, "Matrix4x4");
  46. CE_UNREACHABLE();
  47. }
  48. return env->check_valid(ptr);
  49. }
  50. #endif // if CROWN_DEBUG
  51. void LuaStack::push_vector3(const Vector3 &v)
  52. {
  53. lua_pushlightuserdata(L, device()->_lua_environment->next_vector3(v));
  54. }
  55. void LuaStack::push_quaternion(const Quaternion &q)
  56. {
  57. lua_pushlightuserdata(L, device()->_lua_environment->next_quaternion(q));
  58. }
  59. void LuaStack::push_matrix4x4(const Matrix4x4 &m)
  60. {
  61. lua_pushlightuserdata(L, device()->_lua_environment->next_matrix4x4(m));
  62. }
  63. } // namespace crown