2
0

lua_vector3.cpp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. /*
  2. * Copyright (c) 2012-2014 Daniele Bartolini and individual contributors.
  3. * License: https://github.com/taylor001/crown/blob/master/LICENSE
  4. */
  5. #include "vector3.h"
  6. #include "lua_stack.h"
  7. #include "lua_environment.h"
  8. namespace crown
  9. {
  10. static int vector3_new(lua_State* L)
  11. {
  12. LuaStack stack(L);
  13. stack.push_vector3(Vector3(stack.get_float(1), stack.get_float(2), stack.get_float(3)));
  14. return 1;
  15. }
  16. static int vector3_ctor(lua_State* L)
  17. {
  18. LuaStack stack(L);
  19. stack.remove(1); // Remove table
  20. return vector3_new(L);
  21. }
  22. static int vector3_x(lua_State* L)
  23. {
  24. LuaStack stack(L);
  25. stack.push_float(stack.get_vector3(1).x);
  26. return 1;
  27. }
  28. static int vector3_y(lua_State* L)
  29. {
  30. LuaStack stack(L);
  31. stack.push_float(stack.get_vector3(1).y);
  32. return 1;
  33. }
  34. static int vector3_z(lua_State* L)
  35. {
  36. LuaStack stack(L);
  37. stack.push_float(stack.get_vector3(1).z);
  38. return 1;
  39. }
  40. static int vector3_set_x(lua_State* L)
  41. {
  42. LuaStack stack(L);
  43. stack.get_vector3(1).x = stack.get_float(2);
  44. return 0;
  45. }
  46. static int vector3_set_y(lua_State* L)
  47. {
  48. LuaStack stack(L);
  49. stack.get_vector3(1).y = stack.get_float(2);
  50. return 0;
  51. }
  52. static int vector3_set_z(lua_State* L)
  53. {
  54. LuaStack stack(L);
  55. stack.get_vector3(1).z = stack.get_float(2);
  56. return 0;
  57. }
  58. static int vector3_values(lua_State* L)
  59. {
  60. LuaStack stack(L);
  61. Vector3& a = stack.get_vector3(1);
  62. stack.push_float(a.x);
  63. stack.push_float(a.y);
  64. stack.push_float(a.z);
  65. return 3;
  66. }
  67. static int vector3_add(lua_State* L)
  68. {
  69. LuaStack stack(L);
  70. stack.push_vector3(stack.get_vector3(1) + stack.get_vector3(2));
  71. return 1;
  72. }
  73. static int vector3_subtract(lua_State* L)
  74. {
  75. LuaStack stack(L);
  76. stack.push_vector3(stack.get_vector3(1) - stack.get_vector3(2));
  77. return 1;
  78. }
  79. static int vector3_multiply(lua_State* L)
  80. {
  81. LuaStack stack(L);
  82. stack.push_vector3(stack.get_vector3(1) * stack.get_float(2));
  83. return 1;
  84. }
  85. static int vector3_divide(lua_State* L)
  86. {
  87. LuaStack stack(L);
  88. stack.push_vector3(stack.get_vector3(1) / stack.get_float(2));
  89. return 1;
  90. }
  91. static int vector3_dot(lua_State* L)
  92. {
  93. LuaStack stack(L);
  94. stack.push_float(vector3::dot(stack.get_vector3(1), stack.get_vector3(2)));
  95. return 1;
  96. }
  97. static int vector3_cross(lua_State* L)
  98. {
  99. LuaStack stack(L);
  100. stack.push_vector3(vector3::cross(stack.get_vector3(1), stack.get_vector3(2)));
  101. return 1;
  102. }
  103. static int vector3_equal(lua_State* L)
  104. {
  105. LuaStack stack(L);
  106. stack.push_bool(stack.get_vector3(1) == stack.get_vector3(2));
  107. return 1;
  108. }
  109. static int vector3_length(lua_State* L)
  110. {
  111. LuaStack stack(L);
  112. stack.push_float(vector3::length(stack.get_vector3(1)));
  113. return 1;
  114. }
  115. static int vector3_squared_length(lua_State* L)
  116. {
  117. LuaStack stack(L);
  118. stack.push_float(vector3::squared_length(stack.get_vector3(1)));
  119. return 1;
  120. }
  121. static int vector3_set_length(lua_State* L)
  122. {
  123. LuaStack stack(L);
  124. vector3::set_length(stack.get_vector3(1), stack.get_float(2));
  125. return 0;
  126. }
  127. static int vector3_normalize(lua_State* L)
  128. {
  129. LuaStack stack(L);
  130. stack.push_vector3(vector3::normalize(stack.get_vector3(1)));
  131. return 1;
  132. }
  133. static int vector3_distance(lua_State* L)
  134. {
  135. LuaStack stack(L);
  136. stack.push_float(vector3::distance(stack.get_vector3(1), stack.get_vector3(2)));
  137. return 1;
  138. }
  139. static int vector3_angle(lua_State* L)
  140. {
  141. LuaStack stack(L);
  142. stack.push_float(vector3::angle(stack.get_vector3(1), stack.get_vector3(2)));
  143. return 1;
  144. }
  145. static int vector3_forward(lua_State* L)
  146. {
  147. LuaStack stack(L);
  148. stack.push_vector3(vector3::FORWARD);
  149. return 1;
  150. }
  151. static int vector3_backward(lua_State* L)
  152. {
  153. LuaStack stack(L);
  154. stack.push_vector3(vector3::BACKWARD);
  155. return 1;
  156. }
  157. static int vector3_left(lua_State* L)
  158. {
  159. LuaStack stack(L);
  160. stack.push_vector3(vector3::LEFT);
  161. return 1;
  162. }
  163. static int vector3_right(lua_State* L)
  164. {
  165. LuaStack stack(L);
  166. stack.push_vector3(vector3::RIGHT);
  167. return 1;
  168. }
  169. static int vector3_up(lua_State* L)
  170. {
  171. LuaStack stack(L);
  172. stack.push_vector3(vector3::UP);
  173. return 1;
  174. }
  175. static int vector3_down(lua_State* L)
  176. {
  177. LuaStack stack(L);
  178. stack.push_vector3(vector3::DOWN);
  179. return 1;
  180. }
  181. static int vector2_new(lua_State* L)
  182. {
  183. LuaStack stack(L);
  184. stack.push_vector2(Vector2(stack.get_float(1), stack.get_float(2)));
  185. return 1;
  186. }
  187. static int vector2_ctor(lua_State* L)
  188. {
  189. LuaStack stack(L);
  190. stack.remove(1); // Remove table
  191. return vector2_new(L);
  192. }
  193. void load_vector3(LuaEnvironment& env)
  194. {
  195. env.load_module_function("Vector3", "new", vector3_new);
  196. env.load_module_function("Vector3", "x", vector3_x);
  197. env.load_module_function("Vector3", "y", vector3_y);
  198. env.load_module_function("Vector3", "z", vector3_z);
  199. env.load_module_function("Vector3", "set_x", vector3_set_x);
  200. env.load_module_function("Vector3", "set_y", vector3_set_y);
  201. env.load_module_function("Vector3", "set_z", vector3_set_z);
  202. env.load_module_function("Vector3", "values", vector3_values);
  203. env.load_module_function("Vector3", "add", vector3_add);
  204. env.load_module_function("Vector3", "subtract", vector3_subtract);
  205. env.load_module_function("Vector3", "multiply", vector3_multiply);
  206. env.load_module_function("Vector3", "divide", vector3_divide);
  207. env.load_module_function("Vector3", "dot", vector3_dot);
  208. env.load_module_function("Vector3", "cross", vector3_cross);
  209. env.load_module_function("Vector3", "equal", vector3_equal);
  210. env.load_module_function("Vector3", "length", vector3_length);
  211. env.load_module_function("Vector3", "squared_length", vector3_squared_length);
  212. env.load_module_function("Vector3", "set_length", vector3_set_length);
  213. env.load_module_function("Vector3", "normalize", vector3_normalize);
  214. env.load_module_function("Vector3", "distance", vector3_distance);
  215. env.load_module_function("Vector3", "angle", vector3_angle);
  216. env.load_module_function("Vector3", "forward", vector3_forward);
  217. env.load_module_function("Vector3", "backward", vector3_backward);
  218. env.load_module_function("Vector3", "left", vector3_left);
  219. env.load_module_function("Vector3", "right", vector3_right);
  220. env.load_module_function("Vector3", "up", vector3_up);
  221. env.load_module_function("Vector3", "down", vector3_down);
  222. env.load_module_constructor("Vector3", vector3_ctor);
  223. env.load_module_function("Vector2", "new", vector2_new);
  224. env.load_module_constructor("Vector2", vector2_ctor);
  225. }
  226. } // namespace crown