2
0

BattleCb.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /*
  2. * BattleCb.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 "BattleCb.h"
  12. #include "../LuaStack.h"
  13. #include "../LuaCallWrapper.h"
  14. #include "../../../lib/GameConstants.h"
  15. #include "../../../lib/battle/Unit.h"
  16. namespace scripting
  17. {
  18. namespace api
  19. {
  20. VCMI_REGISTER_CORE_SCRIPT_API(BattleCbProxy, "Battle");
  21. const std::vector<BattleCbProxy::CustomRegType> BattleCbProxy::REGISTER_CUSTOM =
  22. {
  23. {
  24. "getBattlefieldType",
  25. &BattleCbProxy::getBattlefieldType,
  26. false
  27. },
  28. {
  29. "getNextUnitId",
  30. LuaMethodWrapper<BattleCb, decltype(&BattleCb::battleNextUnitId), &BattleCb::battleNextUnitId>::invoke,
  31. false
  32. },
  33. {
  34. "getTacticDistance",
  35. LuaMethodWrapper<BattleCb, decltype(&BattleCb::battleTacticDist), &BattleCb::battleTacticDist>::invoke,
  36. false
  37. },
  38. {
  39. "getTerrainType",
  40. &BattleCbProxy::getTerrainType,
  41. false
  42. },
  43. {
  44. "getUnitById",
  45. LuaMethodWrapper<BattleCb, decltype(&BattleCb::battleGetUnitByID), &BattleCb::battleGetUnitByID>::invoke,
  46. false
  47. },
  48. {
  49. "getUnitByPos",
  50. &BattleCbProxy::getUnitByPos,
  51. false
  52. },
  53. {
  54. "isFinished",
  55. LuaMethodWrapper<BattleCb, decltype(&BattleCb::battleIsFinished), &BattleCb::battleIsFinished>::invoke,
  56. false
  57. }
  58. };
  59. int BattleCbProxy::getBattlefieldType(lua_State * L)
  60. {
  61. LuaStack S(L);
  62. const BattleCb * object;
  63. if(!S.tryGet(1, object))
  64. return S.retVoid();
  65. auto ret = object->battleGetBattlefieldType();
  66. return LuaStack::quickRetStr(L, ret);
  67. }
  68. int BattleCbProxy::getTerrainType(lua_State * L)
  69. {
  70. LuaStack S(L);
  71. const BattleCb * object;
  72. if(!S.tryGet(1, object))
  73. return S.retVoid();
  74. return LuaStack::quickRetStr(L, object->battleTerrainType());
  75. }
  76. int BattleCbProxy::getUnitByPos(lua_State * L)
  77. {
  78. LuaStack S(L);
  79. const BattleCb * object;
  80. if(!S.tryGet(1, object))
  81. return S.retVoid();
  82. BattleHex hex;
  83. if(!S.tryGet(2, hex.hex))
  84. return S.retNil();
  85. bool onlyAlive;
  86. if(!S.tryGet(3, onlyAlive))
  87. onlyAlive = true;//same as default value in battleGetUnitByPos
  88. S.clear();
  89. S.push(object->battleGetUnitByPos(hex, onlyAlive));
  90. return 1;
  91. }
  92. }
  93. }