Vec3Binds.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. #include "Vec3.h"
  2. #include "LuaStack.h"
  3. #include "LuaEnvironment.h"
  4. namespace crown
  5. {
  6. /// Lightweight bind for Vec3
  7. extern "C"
  8. {
  9. //------------------------------------------------------------
  10. int32_t vec3(lua_State* L)
  11. {
  12. LuaStack stack(L);
  13. float x = stack.get_float(1);
  14. float y = stack.get_float(2);
  15. float z = stack.get_float(3);
  16. Vec3* vec = next_vec3();
  17. vec->x = x;
  18. vec->y = y;
  19. vec->z = z;
  20. stack.push_vec3(vec);
  21. return 1;
  22. }
  23. //------------------------------------------------------------
  24. int32_t vec3_values(lua_State* L)
  25. {
  26. LuaStack stack(L);
  27. Vec3* a = stack.get_vec3(1);
  28. float x = a->x;
  29. float y = a->y;
  30. float z = a->z;
  31. stack.push_float(x);
  32. stack.push_float(y);
  33. stack.push_float(z);
  34. return 3;
  35. }
  36. //------------------------------------------------------------
  37. int32_t vec3_add(lua_State* L)
  38. {
  39. LuaStack stack(L);
  40. Vec3* a = stack.get_vec3(1);
  41. Vec3* b = stack.get_vec3(2);
  42. *a += *b;
  43. stack.push_vec3(a);
  44. return 1;
  45. }
  46. //------------------------------------------------------------
  47. int32_t vec3_subtract(lua_State* L)
  48. {
  49. LuaStack stack(L);
  50. Vec3* a = stack.get_vec3(1);
  51. Vec3* b = stack.get_vec3(2);
  52. *a -= *b;
  53. stack.push_vec3(a);
  54. return 1;
  55. }
  56. //------------------------------------------------------------
  57. int32_t vec3_multiply(lua_State* L)
  58. {
  59. LuaStack stack(L);
  60. Vec3* a = stack.get_vec3(1);
  61. float b = stack.get_float(2);
  62. *a *= b;
  63. stack.push_vec3(a);
  64. return 1;
  65. }
  66. //------------------------------------------------------------
  67. int32_t vec3_divide(lua_State* L)
  68. {
  69. LuaStack stack(L);
  70. Vec3* a = stack.get_vec3(1);
  71. float b = stack.get_float(2);
  72. *a /= b;
  73. stack.push_vec3(a);
  74. return 1;
  75. }
  76. //------------------------------------------------------------
  77. int32_t vec3_dot(lua_State* L)
  78. {
  79. LuaStack stack(L);
  80. Vec3* a = stack.get_vec3(1);
  81. Vec3* b = stack.get_vec3(2);
  82. stack.push_float(a->dot(*b));
  83. return 1;
  84. }
  85. //------------------------------------------------------------
  86. int32_t vec3_cross(lua_State* L)
  87. {
  88. LuaStack stack(L);
  89. Vec3* a = stack.get_vec3(1);
  90. Vec3* b = stack.get_vec3(2);
  91. /// CHECK CHECK CHECK
  92. *a = a->cross(*b);
  93. stack.push_vec3(a);
  94. return 1;
  95. }
  96. //------------------------------------------------------------
  97. int32_t vec3_equals(lua_State* L)
  98. {
  99. LuaStack stack(L);
  100. Vec3* a = stack.get_vec3(1);
  101. Vec3* b = stack.get_vec3(2);
  102. stack.push_bool(*a == *b);
  103. return 1;
  104. }
  105. //------------------------------------------------------------
  106. int32_t vec3_lower(lua_State* L)
  107. {
  108. LuaStack stack(L);
  109. Vec3* a = stack.get_vec3(1);
  110. Vec3* b = stack.get_vec3(2);
  111. stack.push_bool(*a < *b);
  112. return 1;
  113. }
  114. //------------------------------------------------------------
  115. int32_t vec3_greater(lua_State* L)
  116. {
  117. LuaStack stack(L);
  118. Vec3* a = stack.get_vec3(1);
  119. Vec3* b = stack.get_vec3(2);
  120. stack.push_bool(*a > *b);
  121. return 1;
  122. }
  123. //------------------------------------------------------------
  124. int32_t vec3_length(lua_State* L)
  125. {
  126. LuaStack stack(L);
  127. Vec3* a = stack.get_vec3(1);
  128. stack.push_float(a->length());
  129. return 1;
  130. }
  131. //------------------------------------------------------------
  132. int32_t vec3_squared_length(lua_State* L)
  133. {
  134. LuaStack stack(L);
  135. Vec3* a = stack.get_vec3(1);
  136. stack.push_float(a->squared_length());
  137. return 1;
  138. }
  139. //------------------------------------------------------------
  140. int32_t vec3_set_length(lua_State* L)
  141. {
  142. LuaStack stack(L);
  143. Vec3* a = stack.get_vec3(1);
  144. float len = stack.get_float(2);
  145. a->set_length(len);
  146. return 0;
  147. }
  148. //------------------------------------------------------------
  149. int32_t vec3_normalize(lua_State* L)
  150. {
  151. LuaStack stack(L);
  152. Vec3* a = stack.get_vec3(1);
  153. a->normalize();
  154. return 0;
  155. }
  156. //------------------------------------------------------------
  157. int32_t vec3_negate(lua_State* L)
  158. {
  159. LuaStack stack(L);
  160. Vec3* a = stack.get_vec3(1);
  161. a->negate();
  162. return 0;
  163. }
  164. //------------------------------------------------------------
  165. int32_t vec3_get_distance_to(lua_State* L)
  166. {
  167. LuaStack stack(L);
  168. Vec3* a = stack.get_vec3(1);
  169. Vec3* b = stack.get_vec3(2);
  170. stack.push_float(a->get_distance_to(*b));
  171. return 1;
  172. }
  173. //------------------------------------------------------------
  174. int32_t vec3_get_angle_between(lua_State* L)
  175. {
  176. LuaStack stack(L);
  177. Vec3* a = stack.get_vec3(1);
  178. Vec3* b = stack.get_vec3(2);
  179. stack.push_float(a->get_angle_between(*b));
  180. return 1;
  181. }
  182. //------------------------------------------------------------
  183. int32_t vec3_zero(lua_State* L)
  184. {
  185. LuaStack stack(L);
  186. Vec3* a = stack.get_vec3(1);
  187. a->zero();
  188. return 0;
  189. }
  190. } // extern "C"
  191. void load_vec3(LuaEnvironment& env)
  192. {
  193. env.load_module_function("Vec3", "new", vec3);
  194. env.load_module_function("Vec3", "val", vec3_values);
  195. env.load_module_function("Vec3", "add", vec3_add);
  196. env.load_module_function("Vec3", "sub", vec3_subtract);
  197. env.load_module_function("Vec3", "mul", vec3_multiply);
  198. env.load_module_function("Vec3", "div", vec3_divide);
  199. env.load_module_function("Vec3", "dot", vec3_dot);
  200. env.load_module_function("Vec3", "cross", vec3_cross);
  201. env.load_module_function("Vec3", "equals", vec3_equals);
  202. env.load_module_function("Vec3", "lower", vec3_lower);
  203. env.load_module_function("Vec3", "greater", vec3_greater);
  204. env.load_module_function("Vec3", "length", vec3_length);
  205. env.load_module_function("Vec3", "squared_length", vec3_squared_length);
  206. env.load_module_function("Vec3", "set_length", vec3_set_length);
  207. env.load_module_function("Vec3", "normalize", vec3_normalize);
  208. env.load_module_function("Vec3", "negate", vec3_negate);
  209. env.load_module_function("Vec3", "get_distance_to", vec3_get_distance_to);
  210. env.load_module_function("Vec3", "get_angle_between", vec3_get_angle_between);
  211. env.load_module_function("Vec3", "zero", vec3_zero);
  212. }
  213. } // namespace crown