QuatBinds.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #include "Quat.h"
  2. #include "Vec3.h"
  3. #include "LuaStack.h"
  4. #include "LuaEnvironment.h"
  5. namespace crown
  6. {
  7. extern "C"
  8. {
  9. const int32_t LUA_QUAT_BUFFER_SIZE = 4096;
  10. Quat quat_buffer[LUA_QUAT_BUFFER_SIZE];
  11. uint32_t quat_used = 0;
  12. int32_t quat(lua_State* L)
  13. {
  14. LuaStack stack(L);
  15. float w = stack.get_float(1);
  16. Vec3* v = (Vec3*)stack.get_lightudata(2);
  17. quat_buffer[quat_used].w = w;
  18. quat_buffer[quat_used].v = *v;
  19. stack.push_lightudata(&quat_buffer[quat_used]);
  20. quat_used++;
  21. return 1;
  22. }
  23. int32_t quat_negate(lua_State* L)
  24. {
  25. LuaStack stack(L);
  26. Quat* q = (Quat*)stack.get_lightudata(1);
  27. q->negate();
  28. return 0;
  29. }
  30. int32_t quat_load_identity(lua_State* L)
  31. {
  32. LuaStack stack(L);
  33. Quat* q = (Quat*)stack.get_lightudata(1);
  34. q->load_identity();
  35. return 0;
  36. }
  37. int32_t quat_length(lua_State* L)
  38. {
  39. LuaStack stack(L);
  40. Quat* q = (Quat*)stack.get_lightudata(1);
  41. stack.push_float(q->length());
  42. return 1;
  43. }
  44. int32_t quat_conjugate(lua_State* L)
  45. {
  46. LuaStack stack(L);
  47. Quat* q = (Quat*)stack.get_lightudata(1);
  48. Quat r = q->get_conjugate();
  49. stack.push_lightudata(&r);
  50. return 1;
  51. }
  52. int32_t quat_inverse(lua_State* L)
  53. {
  54. LuaStack stack(L);
  55. Quat* q = (Quat*)stack.get_lightudata(1);
  56. Quat r = q->get_inverse();
  57. stack.push_lightudata(&r);
  58. return 1;
  59. }
  60. int32_t quat_cross(lua_State* L)
  61. {
  62. LuaStack stack(L);
  63. Quat* q1 = (Quat*)stack.get_lightudata(1);
  64. Quat* q2 = (Quat*)stack.get_lightudata(2);
  65. Quat r = *q1 * (*q2);
  66. stack.push_lightudata(&r);
  67. return 1;
  68. }
  69. int32_t quat_multiply(lua_State* L)
  70. {
  71. LuaStack stack(L);
  72. Quat* q = (Quat*)stack.get_lightudata(1);
  73. float k = stack.get_float(2);
  74. Quat r = *q * k;
  75. stack.push_lightudata(&r);
  76. return 1;
  77. }
  78. int32_t quat_power(lua_State* L)
  79. {
  80. LuaStack stack(L);
  81. Quat* q = (Quat*)stack.get_lightudata(1);
  82. float k = stack.get_float(2);
  83. Quat r = q->power(k);
  84. stack.push_lightudata(&r);
  85. return 1;
  86. }
  87. } // extern "C"
  88. void load_quat(LuaEnvironment& env)
  89. {
  90. }
  91. } //namespace crown