CDefaultSpellMechanics.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*
  2. * CDefaultSpellMechanics.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 "ISpellMechanics.h"
  12. #include "../NetPacks.h"
  13. #include "../battle/CBattleInfoEssentials.h"
  14. namespace spells
  15. {
  16. ///all combat spells
  17. class DLL_LINKAGE DefaultSpellMechanics : public BaseMechanics
  18. {
  19. public:
  20. DefaultSpellMechanics(const IBattleCast * event);
  21. std::vector<BattleHex> rangeInHexes(BattleHex centralHex, bool * outDroppedHexes = nullptr) const override;
  22. void cast(const SpellCastEnvironment * env, const Target & target, std::vector <const CStack*> & reflected) override final;
  23. bool counteringSelector(const Bonus * bonus) const;
  24. protected:
  25. std::vector<const battle::Unit *> affectedUnits;
  26. static void doRemoveEffects(const SpellCastEnvironment * env, const std::vector<const battle::Unit *> & targets, const CSelector & selector);
  27. virtual void beforeCast(vstd::RNG & rng, const Target & target, std::vector <const CStack*> & reflected) = 0;
  28. virtual void applyCastEffects(const SpellCastEnvironment * env, const Target & target) const = 0;
  29. virtual void afterCast() const;
  30. void addBattleLog(MetaString && line);
  31. void addCustomEffect(const battle::Unit * target, ui32 effect);
  32. std::set<BattleHex> spellRangeInHexes(BattleHex centralHex) const;
  33. private:
  34. BattleSpellCast sc;
  35. int spellCost;
  36. };
  37. } //namespace spells