Vec2Binds.cpp 4.7 KB

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