lua_quaternion_box.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /*
  2. * Copyright (c) 2012-2014 Daniele Bartolini and individual contributors.
  3. * License: https://github.com/taylor001/crown/blob/master/LICENSE
  4. */
  5. #include "quaternion.h"
  6. #include "vector3.h"
  7. #include "lua_stack.h"
  8. #include "lua_environment.h"
  9. namespace crown
  10. {
  11. static int quaternionbox_new(lua_State* L)
  12. {
  13. LuaStack stack(L);
  14. Quaternion q;
  15. if (stack.num_args() == 1)
  16. {
  17. q = stack.get_quaternion(1);
  18. }
  19. if (stack.num_args() == 2)
  20. {
  21. Quaternion quat(stack.get_vector3(1), stack.get_float(2));
  22. q = quat;
  23. }
  24. else if (stack.num_args() == 4)
  25. {
  26. Quaternion quat(stack.get_float(1), stack.get_float(2), stack.get_float(3), stack.get_float(4));
  27. q = quat;
  28. }
  29. stack.push_quaternionbox(q);
  30. return 1;
  31. }
  32. static int quaternionbox_ctor(lua_State* L)
  33. {
  34. LuaStack stack(L);
  35. stack.remove(1); // Remove table
  36. return quaternionbox_new(L);
  37. }
  38. static int quaternionbox_store(lua_State* L)
  39. {
  40. LuaStack stack(L);
  41. Quaternion& q = stack.get_quaternionbox(1);
  42. if (stack.num_args() == 2)
  43. {
  44. q = stack.get_quaternion(2);
  45. }
  46. if (stack.num_args() == 3)
  47. {
  48. Quaternion quat(stack.get_vector3(2), stack.get_float(3));
  49. q = quat;
  50. }
  51. else if (stack.num_args() == 5)
  52. {
  53. Quaternion quat(stack.get_float(2), stack.get_float(3), stack.get_float(4), stack.get_float(5));
  54. q = quat;
  55. }
  56. return 0;
  57. }
  58. static int quaternionbox_unbox(lua_State* L)
  59. {
  60. LuaStack stack(L);
  61. Quaternion& q = stack.get_quaternionbox(1);
  62. stack.push_quaternion(q);
  63. return 1;
  64. }
  65. static int quaternionbox_tostring(lua_State* L)
  66. {
  67. LuaStack stack(L);
  68. Quaternion& q = stack.get_quaternionbox(1);
  69. stack.push_fstring("QuaternionBox (%p)", &q);
  70. return 1;
  71. }
  72. void load_quaternionbox(LuaEnvironment& env)
  73. {
  74. env.load_module_function("QuaternionBox", "new", quaternionbox_new);
  75. env.load_module_function("QuaternionBox", "store", quaternionbox_store);
  76. env.load_module_function("QuaternionBox", "unbox", quaternionbox_unbox);
  77. env.load_module_function("QuaternionBox", "__tostring", quaternionbox_tostring);
  78. env.load_module_constructor("QuaternionBox", quaternionbox_ctor);
  79. }
  80. } // namespace crown