Vector2f.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. #include "Vector2f.h"
  2. #include <RmlUi/Core/Vector2.h>
  3. namespace Rml {
  4. namespace Lua {
  5. template <>
  6. void ExtraInit<Vector2f>(lua_State* L, int metatable_index)
  7. {
  8. lua_pushcfunction(L, Vector2fnew);
  9. lua_setfield(L, metatable_index - 1, "new");
  10. lua_pushcfunction(L, Vector2f__mul);
  11. lua_setfield(L, metatable_index, "__mul");
  12. lua_pushcfunction(L, Vector2f__div);
  13. lua_setfield(L, metatable_index, "__div");
  14. lua_pushcfunction(L, Vector2f__add);
  15. lua_setfield(L, metatable_index, "__add");
  16. lua_pushcfunction(L, Vector2f__sub);
  17. lua_setfield(L, metatable_index, "__sub");
  18. lua_pushcfunction(L, Vector2f__eq);
  19. lua_setfield(L, metatable_index, "__eq");
  20. // stack is in the same state as it was before it entered this function
  21. return;
  22. }
  23. int Vector2fnew(lua_State* L)
  24. {
  25. float x = (float)luaL_checknumber(L, 1);
  26. float y = (float)luaL_checknumber(L, 2);
  27. Vector2f* vect = new Vector2f(x, y);
  28. LuaType<Vector2f>::push(L, vect, true); // true means it will be deleted when it is garbage collected
  29. return 1;
  30. }
  31. int Vector2f__mul(lua_State* L)
  32. {
  33. Vector2f* lhs = LuaType<Vector2f>::check(L, 1);
  34. RMLUI_CHECK_OBJ(lhs);
  35. float rhs = (float)luaL_checknumber(L, 2);
  36. Vector2f* res = new Vector2f(0.f, 0.f);
  37. (*res) = (*lhs) * rhs;
  38. LuaType<Vector2f>::push(L, res, true);
  39. return 1;
  40. }
  41. int Vector2f__div(lua_State* L)
  42. {
  43. Vector2f* lhs = LuaType<Vector2f>::check(L, 1);
  44. RMLUI_CHECK_OBJ(lhs);
  45. float rhs = (float)luaL_checknumber(L, 2);
  46. Vector2f* res = new Vector2f(0.f, 0.f);
  47. (*res) = (*lhs) / rhs;
  48. LuaType<Vector2f>::push(L, res, true);
  49. return 1;
  50. }
  51. int Vector2f__add(lua_State* L)
  52. {
  53. Vector2f* lhs = LuaType<Vector2f>::check(L, 1);
  54. RMLUI_CHECK_OBJ(lhs);
  55. Vector2f* rhs = LuaType<Vector2f>::check(L, 2);
  56. RMLUI_CHECK_OBJ(rhs);
  57. Vector2f* res = new Vector2f(0.f, 0.f);
  58. (*res) = (*lhs) + (*rhs);
  59. LuaType<Vector2f>::push(L, res, true);
  60. return 1;
  61. }
  62. int Vector2f__sub(lua_State* L)
  63. {
  64. Vector2f* lhs = LuaType<Vector2f>::check(L, 1);
  65. RMLUI_CHECK_OBJ(lhs);
  66. Vector2f* rhs = LuaType<Vector2f>::check(L, 2);
  67. RMLUI_CHECK_OBJ(rhs);
  68. Vector2f* res = new Vector2f(0.f, 0.f);
  69. (*res) = (*lhs) - (*rhs);
  70. LuaType<Vector2f>::push(L, res, true);
  71. return 1;
  72. }
  73. int Vector2f__eq(lua_State* L)
  74. {
  75. Vector2f* lhs = LuaType<Vector2f>::check(L, 1);
  76. RMLUI_CHECK_OBJ(lhs);
  77. Vector2f* rhs = LuaType<Vector2f>::check(L, 2);
  78. RMLUI_CHECK_OBJ(rhs);
  79. lua_pushboolean(L, (*lhs) == (*rhs) ? 1 : 0);
  80. return 1;
  81. }
  82. int Vector2fDotProduct(lua_State* L, Vector2f* obj)
  83. {
  84. Vector2f* rhs = LuaType<Vector2f>::check(L, 1);
  85. RMLUI_CHECK_OBJ(rhs);
  86. float res = obj->DotProduct(*rhs);
  87. lua_pushnumber(L, res);
  88. return 1;
  89. }
  90. int Vector2fNormalise(lua_State* L, Vector2f* obj)
  91. {
  92. Vector2f* res = new Vector2f();
  93. (*res) = obj->Normalise();
  94. LuaType<Vector2f>::push(L, res, true);
  95. return 1;
  96. }
  97. int Vector2fRotate(lua_State* L, Vector2f* obj)
  98. {
  99. float num = (float)luaL_checknumber(L, 1);
  100. Vector2f* res = new Vector2f();
  101. (*res) = obj->Rotate(num);
  102. LuaType<Vector2f>::push(L, res, true);
  103. return 1;
  104. }
  105. int Vector2fGetAttrx(lua_State* L)
  106. {
  107. Vector2f* self = LuaType<Vector2f>::check(L, 1);
  108. RMLUI_CHECK_OBJ(self);
  109. lua_pushnumber(L, self->x);
  110. return 1;
  111. }
  112. int Vector2fGetAttry(lua_State* L)
  113. {
  114. Vector2f* self = LuaType<Vector2f>::check(L, 1);
  115. RMLUI_CHECK_OBJ(self);
  116. lua_pushnumber(L, self->y);
  117. return 1;
  118. }
  119. int Vector2fGetAttrmagnitude(lua_State* L)
  120. {
  121. Vector2f* self = LuaType<Vector2f>::check(L, 1);
  122. RMLUI_CHECK_OBJ(self);
  123. lua_pushnumber(L, self->Magnitude());
  124. return 1;
  125. }
  126. int Vector2fSetAttrx(lua_State* L)
  127. {
  128. Vector2f* self = LuaType<Vector2f>::check(L, 1);
  129. RMLUI_CHECK_OBJ(self);
  130. float value = (float)luaL_checknumber(L, 2);
  131. self->x = value;
  132. return 0;
  133. }
  134. int Vector2fSetAttry(lua_State* L)
  135. {
  136. Vector2f* self = LuaType<Vector2f>::check(L, 1);
  137. RMLUI_CHECK_OBJ(self);
  138. float value = (float)luaL_checknumber(L, 2);
  139. self->y = value;
  140. return 0;
  141. }
  142. RegType<Vector2f> Vector2fMethods[] = {
  143. RMLUI_LUAMETHOD(Vector2f, DotProduct),
  144. RMLUI_LUAMETHOD(Vector2f, Normalise),
  145. RMLUI_LUAMETHOD(Vector2f, Rotate),
  146. {nullptr, nullptr},
  147. };
  148. luaL_Reg Vector2fGetters[] = {
  149. RMLUI_LUAGETTER(Vector2f, x),
  150. RMLUI_LUAGETTER(Vector2f, y),
  151. RMLUI_LUAGETTER(Vector2f, magnitude),
  152. {nullptr, nullptr},
  153. };
  154. luaL_Reg Vector2fSetters[] = {
  155. RMLUI_LUASETTER(Vector2f, x),
  156. RMLUI_LUASETTER(Vector2f, y),
  157. {nullptr, nullptr},
  158. };
  159. RMLUI_LUATYPE_DEFINE(Vector2f)
  160. } // namespace Lua
  161. } // namespace Rml