IBattleInfoCallback.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * IBattleInfoCallback.h, 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. #pragma once
  11. #include "GameConstants.h"
  12. #include "BattleHex.h"
  13. #include <vcmi/Entity.h>
  14. VCMI_LIB_NAMESPACE_BEGIN
  15. struct CObstacleInstance;
  16. class BattleField;
  17. class IBattleInfo;
  18. namespace battle
  19. {
  20. class IUnitInfo;
  21. class Unit;
  22. using Units = std::vector<const Unit *>;
  23. using UnitFilter = std::function<bool(const Unit *)>;
  24. }
  25. struct DamageRange
  26. {
  27. int64_t min = 0;
  28. int64_t max = 0;
  29. };
  30. struct DamageEstimation
  31. {
  32. DamageRange damage;
  33. DamageRange kills;
  34. };
  35. #if SCRIPTING_ENABLED
  36. namespace scripting
  37. {
  38. class Pool;
  39. }
  40. #endif
  41. class DLL_LINKAGE IBattleInfoCallback : public IConstBonusProvider
  42. {
  43. public:
  44. #if SCRIPTING_ENABLED
  45. virtual scripting::Pool * getContextPool() const = 0;
  46. #endif
  47. virtual const IBattleInfo * getBattle() const = 0;
  48. virtual std::optional<PlayerColor> getPlayerID() const = 0;
  49. virtual TerrainId battleTerrainType() const = 0;
  50. virtual BattleField battleGetBattlefieldType() const = 0;
  51. ///return none if battle is ongoing; otherwise the victorious side (0/1) or 2 if it is a draw
  52. virtual std::optional<int> battleIsFinished() const = 0;
  53. virtual si8 battleTacticDist() const = 0; //returns tactic distance in current tactics phase; 0 if not in tactics phase
  54. virtual si8 battleGetTacticsSide() const = 0; //returns which side is in tactics phase, undefined if none (?)
  55. virtual uint32_t battleNextUnitId() const = 0;
  56. virtual battle::Units battleGetUnitsIf(battle::UnitFilter predicate) const = 0;
  57. virtual const battle::Unit * battleGetUnitByID(uint32_t ID) const = 0;
  58. virtual const battle::Unit * battleGetUnitByPos(BattleHex pos, bool onlyAlive = true) const = 0;
  59. virtual const battle::Unit * battleActiveUnit() const = 0;
  60. //blocking obstacles makes tile inaccessible, others cause special effects (like Land Mines, Moat, Quicksands)
  61. virtual std::vector<std::shared_ptr<const CObstacleInstance>> battleGetAllObstaclesOnPos(BattleHex tile, bool onlyBlocking = true) const = 0;
  62. virtual std::vector<std::shared_ptr<const CObstacleInstance>> getAllAffectedObstaclesByStack(const battle::Unit * unit, const std::set<BattleHex> & passed) const = 0;
  63. };
  64. VCMI_LIB_NAMESPACE_END