Vector2f.cpp 4.3 KB

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