lua_vector3.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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 vector2_new(lua_State* L)
  146. {
  147. LuaStack stack(L);
  148. stack.push_vector2(Vector2(stack.get_float(1), stack.get_float(2)));
  149. return 1;
  150. }
  151. static int vector2_ctor(lua_State* L)
  152. {
  153. LuaStack stack(L);
  154. stack.remove(1); // Remove table
  155. return vector2_new(L);
  156. }
  157. void load_vector3(LuaEnvironment& env)
  158. {
  159. env.load_module_function("Vector3", "new", vector3_new);
  160. env.load_module_function("Vector3", "x", vector3_x);
  161. env.load_module_function("Vector3", "y", vector3_y);
  162. env.load_module_function("Vector3", "z", vector3_z);
  163. env.load_module_function("Vector3", "set_x", vector3_set_x);
  164. env.load_module_function("Vector3", "set_y", vector3_set_y);
  165. env.load_module_function("Vector3", "set_z", vector3_set_z);
  166. env.load_module_function("Vector3", "values", vector3_values);
  167. env.load_module_function("Vector3", "add", vector3_add);
  168. env.load_module_function("Vector3", "subtract", vector3_subtract);
  169. env.load_module_function("Vector3", "multiply", vector3_multiply);
  170. env.load_module_function("Vector3", "divide", vector3_divide);
  171. env.load_module_function("Vector3", "dot", vector3_dot);
  172. env.load_module_function("Vector3", "cross", vector3_cross);
  173. env.load_module_function("Vector3", "equal", vector3_equal);
  174. env.load_module_function("Vector3", "length", vector3_length);
  175. env.load_module_function("Vector3", "squared_length", vector3_squared_length);
  176. env.load_module_function("Vector3", "set_length", vector3_set_length);
  177. env.load_module_function("Vector3", "normalize", vector3_normalize);
  178. env.load_module_function("Vector3", "distance", vector3_distance);
  179. env.load_module_function("Vector3", "angle", vector3_angle);
  180. env.load_module_constructor("Vector3", vector3_ctor);
  181. env.load_module_function("Vector2", "new", vector2_new);
  182. env.load_module_constructor("Vector2", vector2_ctor);
  183. }
  184. } // namespace crown