SetResources.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. /*
  2. * api/netpacks/SetResources.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "SetResources.h"
  12. #include "../../LuaStack.h"
  13. #include "../Registry.h"
  14. VCMI_LIB_NAMESPACE_BEGIN
  15. namespace scripting
  16. {
  17. namespace api
  18. {
  19. namespace netpacks
  20. {
  21. VCMI_REGISTER_SCRIPT_API(SetResourcesProxy, "netpacks.SetResources");
  22. const std::vector<SetResourcesProxy::CustomRegType> SetResourcesProxy::REGISTER_CUSTOM =
  23. {
  24. {"new", &Wrapper::constructor, true},
  25. {"getAbs", &SetResourcesProxy::getAbs, false},
  26. {"setAbs", &SetResourcesProxy::setAbs, false},
  27. {"getPlayer", &SetResourcesProxy::getPlayer, false},
  28. {"setPlayer", &SetResourcesProxy::setPlayer, false},
  29. {"setAmount", &SetResourcesProxy::setAmount, false},
  30. {"getAmount", &SetResourcesProxy::getAmount, false},
  31. {"clear", &SetResourcesProxy::clear, false},
  32. {"toNetpackLight", &PackForClientProxy<SetResourcesProxy>::toNetpackLight, false}
  33. };
  34. int SetResourcesProxy::getAbs(lua_State * L)
  35. {
  36. LuaStack S(L);
  37. std::shared_ptr<SetResources> object;
  38. if(!S.tryGet(1, object))
  39. return S.retVoid();
  40. return LuaStack::quickRetBool(L, object->abs);
  41. }
  42. int SetResourcesProxy::setAbs(lua_State * L)
  43. {
  44. LuaStack S(L);
  45. std::shared_ptr<SetResources> object;
  46. if(!S.tryGet(1, object))
  47. return S.retVoid();
  48. bool value = false;
  49. if(S.tryGet(2, value))
  50. object->abs = value;
  51. return S.retVoid();
  52. }
  53. int SetResourcesProxy::getPlayer(lua_State * L)
  54. {
  55. LuaStack S(L);
  56. std::shared_ptr<SetResources> object;
  57. if(!S.tryGet(1, object))
  58. return S.retVoid();
  59. S.clear();
  60. S.push(object->player);
  61. return 1;
  62. }
  63. int SetResourcesProxy::setPlayer(lua_State * L)
  64. {
  65. LuaStack S(L);
  66. std::shared_ptr<SetResources> object;
  67. if(!S.tryGet(1, object))
  68. return S.retVoid();
  69. PlayerColor value;
  70. if(S.tryGet(2, value))
  71. object->player = value;
  72. return S.retVoid();
  73. }
  74. int SetResourcesProxy::getAmount(lua_State * L)
  75. {
  76. LuaStack S(L);
  77. std::shared_ptr<SetResources> object;
  78. if(!S.tryGet(1, object))
  79. return S.retVoid();
  80. Res::ERes type = Res::ERes::INVALID;
  81. if(!S.tryGet(2, type))
  82. return S.retVoid();
  83. S.clear();
  84. const TQuantity amount = vstd::atOrDefault(object->res, static_cast<size_t>(type), 0);
  85. S.push(amount);
  86. return 1;
  87. }
  88. int SetResourcesProxy::setAmount(lua_State * L)
  89. {
  90. LuaStack S(L);
  91. std::shared_ptr<SetResources> object;
  92. if(!S.tryGet(1, object))
  93. return S.retVoid();
  94. Res::ERes type = Res::ERes::INVALID;
  95. if(!S.tryGet(2, type))
  96. return S.retVoid();
  97. int typeIdx = static_cast<int>(type);
  98. if(typeIdx < 0 || typeIdx >= object->res.size())
  99. return S.retVoid();
  100. TQuantity amount = 0;
  101. if(!S.tryGet(3, amount))
  102. return S.retVoid();
  103. object->res.at(typeIdx) = amount;
  104. return S.retVoid();
  105. }
  106. int SetResourcesProxy::clear(lua_State * L)
  107. {
  108. LuaStack S(L);
  109. std::shared_ptr<SetResources> object;
  110. if(!S.tryGet(1, object))
  111. return S.retVoid();
  112. object->res.amin(0);
  113. object->res.positive();
  114. return S.retVoid();
  115. }
  116. }
  117. }
  118. }
  119. VCMI_LIB_NAMESPACE_END