Vec2Binds.cpp 3.8 KB

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