IBattleInfoCallback.h 2.6 KB

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