Vec2Binds.cpp 4.5 KB

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