Vec2Binds.cpp 4.6 KB

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