Vec2Binds.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. #include "Vec2.h"
  2. #include "LuaStack.h"
  3. #include "LuaEnvironment.h"
  4. namespace crown
  5. {
  6. extern "C"
  7. {
  8. Vec2* next_vec2()
  9. {
  10. return &vec2_buffer[vec2_used++];
  11. }
  12. int32_t vec2(lua_State* L)
  13. {
  14. LuaStack stack(L);
  15. float x = stack.get_float(1);
  16. float y = stack.get_float(2);
  17. vec2_buffer[vec2_used].x = x;
  18. vec2_buffer[vec2_used].y = y;
  19. stack.push_vec2(&vec2_buffer[vec2_used]);
  20. vec2_used++;
  21. return 1;
  22. }
  23. int32_t vec2_values(lua_State* L)
  24. {
  25. LuaStack stack(L);
  26. Vec2* a = (Vec2*)stack.get_vec2(1);
  27. float x = a->x;
  28. float y = a->y;
  29. stack.push_float(x);
  30. stack.push_float(y);
  31. return 2;
  32. }
  33. int32_t vec2_add(lua_State* L)
  34. {
  35. LuaStack stack(L);
  36. Vec2* a = (Vec2*)stack.get_vec2(1);
  37. Vec2* b = (Vec2*)stack.get_vec2(2);
  38. *a += *b;
  39. stack.push_vec2(a);
  40. return 1;
  41. }
  42. int32_t vec2_subtract(lua_State* L)
  43. {
  44. LuaStack stack(L);
  45. Vec2* a = (Vec2*) stack.get_vec2(1);
  46. Vec2* b = (Vec2*) stack.get_vec2(2);
  47. *a -= *b;
  48. stack.push_vec2(a);
  49. return 1;
  50. }
  51. int32_t vec2_multiply(lua_State* L)
  52. {
  53. LuaStack stack(L);
  54. Vec2* a = (Vec2*) stack.get_vec2(1);
  55. float k = stack.get_float(2);
  56. *a *= k;
  57. stack.push_vec2(a);
  58. return 1;
  59. }
  60. int32_t vec2_divide(lua_State* L)
  61. {
  62. LuaStack stack(L);
  63. Vec2* a = (Vec2*) stack.get_vec2(1);
  64. float k = stack.get_float(2);
  65. *a /= k;
  66. stack.push_vec2(a);
  67. return 1;
  68. }
  69. int32_t vec2_dot(lua_State* L)
  70. {
  71. LuaStack stack(L);
  72. Vec2* a = (Vec2*) stack.get_vec2(1);
  73. Vec2* b = (Vec2*) stack.get_vec2(2);
  74. stack.push_float(a->dot(*b));
  75. return 1;
  76. }
  77. int32_t vec2_equals(lua_State* L)
  78. {
  79. LuaStack stack(L);
  80. Vec2* a = (Vec2*) stack.get_vec2(1);
  81. Vec2* b = (Vec2*) stack.get_vec2(2);
  82. stack.push_bool(*a == *b);
  83. return 1;
  84. }
  85. int32_t vec2_lower(lua_State* L)
  86. {
  87. LuaStack stack(L);
  88. Vec2* a = (Vec2*) stack.get_vec2(1);
  89. Vec2* b = (Vec2*) stack.get_vec2(2);
  90. stack.push_bool(*a < *b);
  91. return 1;
  92. }
  93. int32_t vec2_greater(lua_State* L)
  94. {
  95. LuaStack stack(L);
  96. Vec2* a = (Vec2*) stack.get_vec2(1);
  97. Vec2* b = (Vec2*) stack.get_vec2(2);
  98. stack.push_bool(*a > *b);
  99. return 1;
  100. }
  101. int32_t vec2_length(lua_State* L)
  102. {
  103. LuaStack stack(L);
  104. Vec2* a = (Vec2*) stack.get_vec2(1);
  105. stack.push_float(a->length());
  106. return 1;
  107. }
  108. int32_t vec2_squared_length(lua_State* L)
  109. {
  110. LuaStack stack(L);
  111. Vec2* a = (Vec2*) stack.get_vec2(1);
  112. stack.push_float(a->squared_length());
  113. return 1;
  114. }
  115. int32_t vec2_set_length(lua_State* L)
  116. {
  117. LuaStack stack(L);
  118. Vec2* a = (Vec2*) stack.get_vec2(1);
  119. float len = stack.get_float(2);
  120. a->set_length(len);
  121. return 0;
  122. }
  123. int32_t vec2_normalize(lua_State* L)
  124. {
  125. LuaStack stack(L);
  126. Vec2* a = (Vec2*) stack.get_vec2(1);
  127. a->normalize();
  128. stack.push_vec2(a);
  129. return 1;
  130. }
  131. int32_t vec2_negate(lua_State* L)
  132. {
  133. LuaStack stack(L);
  134. Vec2* a = (Vec2*) stack.get_vec2(1);
  135. a->negate();
  136. stack.push_vec2(a);
  137. return 1;
  138. }
  139. int32_t vec2_get_distance_to(lua_State* L)
  140. {
  141. LuaStack stack(L);
  142. Vec2* a = (Vec2*) stack.get_vec2(1);
  143. Vec2* b = (Vec2*) stack.get_vec2(2);
  144. stack.push_float(a->get_distance_to(*b));
  145. return 1;
  146. }
  147. int32_t vec2_get_angle_between(lua_State* L)
  148. {
  149. LuaStack stack(L);
  150. Vec2* a = (Vec2*) stack.get_vec2(1);
  151. Vec2* b = (Vec2*) stack.get_vec2(2);
  152. stack.push_float(a->get_angle_between(*b));
  153. return 1;
  154. }
  155. int32_t vec2_zero(lua_State* L)
  156. {
  157. LuaStack stack(L);
  158. Vec2* a = (Vec2*) stack.get_vec2(1);
  159. a->zero();
  160. return 0;
  161. }
  162. } // extern "C"
  163. void load_vec2(LuaEnvironment& env)
  164. {
  165. env.load_module_function("Vec2", "new", vec2);
  166. env.load_module_function("Vec2", "val", vec2_values);
  167. env.load_module_function("Vec2", "add", vec2_add);
  168. env.load_module_function("Vec2", "sub", vec2_subtract);
  169. env.load_module_function("Vec2", "mul", vec2_multiply);
  170. env.load_module_function("Vec2", "div", vec2_divide);
  171. env.load_module_function("Vec2", "dot", vec2_dot);
  172. env.load_module_function("Vec2", "equals", vec2_equals);
  173. env.load_module_function("Vec2", "lower", vec2_lower);
  174. env.load_module_function("Vec2", "greater", vec2_greater);
  175. env.load_module_function("Vec2", "length", vec2_length);
  176. env.load_module_function("Vec2", "squared_length", vec2_squared_length);
  177. env.load_module_function("Vec2", "set_length", vec2_set_length);
  178. env.load_module_function("Vec2", "normalize", vec2_normalize);
  179. env.load_module_function("Vec2", "negate", vec2_negate);
  180. env.load_module_function("Vec2", "get_distance_to", vec2_get_distance_to);
  181. env.load_module_function("Vec2", "get_angle_between", vec2_get_angle_between);
  182. env.load_module_function("Vec2", "zero", vec2_zero);
  183. }
  184. } // namespace crown