lua_quaternion.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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 quaternion_new(lua_State* L)
  12. {
  13. LuaStack stack(L);
  14. stack.push_quaternion(Quaternion(stack.get_vector3(1), stack.get_float(2)));
  15. return 1;
  16. }
  17. static int quaternion_ctor(lua_State* L)
  18. {
  19. LuaStack stack(L);
  20. stack.remove(1); // Remove table
  21. return quaternion_new(L);
  22. }
  23. static int quaternion_negate(lua_State* L)
  24. {
  25. LuaStack stack(L);
  26. stack.push_quaternion(-stack.get_quaternion(1));
  27. return 1;
  28. }
  29. static int quaternion_identity(lua_State* L)
  30. {
  31. LuaStack stack(L);
  32. stack.push_quaternion(quaternion::IDENTITY);
  33. return 1;
  34. }
  35. static int quaternion_length(lua_State* L)
  36. {
  37. LuaStack stack(L);
  38. stack.push_float(quaternion::length(stack.get_quaternion(1)));
  39. return 1;
  40. }
  41. static int quaternion_normalize(lua_State* L)
  42. {
  43. LuaStack stack(L);
  44. stack.push_quaternion(quaternion::normalize(stack.get_quaternion(1)));
  45. return 1;
  46. }
  47. static int quaternion_conjugate(lua_State* L)
  48. {
  49. LuaStack stack(L);
  50. stack.push_quaternion(quaternion::conjugate(stack.get_quaternion(1)));
  51. return 1;
  52. }
  53. static int quaternion_inverse(lua_State* L)
  54. {
  55. LuaStack stack(L);
  56. stack.push_quaternion(quaternion::inverse(stack.get_quaternion(1)));
  57. return 1;
  58. }
  59. static int quaternion_multiply(lua_State* L)
  60. {
  61. LuaStack stack(L);
  62. stack.push_quaternion(stack.get_quaternion(1) * stack.get_quaternion(2));
  63. return 1;
  64. }
  65. static int quaternion_multiply_by_scalar(lua_State* L)
  66. {
  67. LuaStack stack(L);
  68. stack.push_quaternion(stack.get_quaternion(1) * stack.get_float(2));
  69. return 1;
  70. }
  71. static int quaternion_power(lua_State* L)
  72. {
  73. LuaStack stack(L);
  74. stack.push_quaternion(quaternion::power(stack.get_quaternion(1), stack.get_float(2)));
  75. return 1;
  76. }
  77. static int quaternion_elements(lua_State* L)
  78. {
  79. LuaStack stack(L);
  80. const Quaternion& q = stack.get_quaternion(1);
  81. stack.push_float(q.x);
  82. stack.push_float(q.y);
  83. stack.push_float(q.z);
  84. stack.push_float(q.w);
  85. return 4;
  86. }
  87. void load_quaternion(LuaEnvironment& env)
  88. {
  89. env.load_module_function("Quaternion", "new", quaternion_new);
  90. env.load_module_function("Quaternion", "negate", quaternion_negate);
  91. env.load_module_function("Quaternion", "identity", quaternion_identity);
  92. env.load_module_function("Quaternion", "multiply", quaternion_multiply);
  93. env.load_module_function("Quaternion", "multiply_by_scalar", quaternion_multiply_by_scalar);
  94. env.load_module_function("Quaternion", "length", quaternion_length);
  95. env.load_module_function("Quaternion", "normalize", quaternion_normalize);
  96. env.load_module_function("Quaternion", "conjugate", quaternion_conjugate);
  97. env.load_module_function("Quaternion", "inverse", quaternion_inverse);
  98. env.load_module_function("Quaternion", "power", quaternion_power);
  99. env.load_module_function("Quaternion", "elements", quaternion_elements);
  100. env.load_module_constructor("Quaternion", quaternion_ctor);
  101. }
  102. } //namespace crown