IBattleInfoCallback.h 2.1 KB

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