BattleSpellMechanics.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /*
  2. * BattleSpellMechanics.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 "CDefaultSpellMechanics.h"
  12. class DLL_LINKAGE HealingSpellMechanics : public DefaultSpellMechanics
  13. {
  14. public:
  15. enum class EHealLevel
  16. {
  17. HEAL,
  18. RESURRECT,
  19. TRUE_RESURRECT
  20. };
  21. HealingSpellMechanics(CSpell * s): DefaultSpellMechanics(s){};
  22. protected:
  23. void applyBattleEffects(const SpellCastEnvironment * env, BattleSpellCastParameters & parameters, SpellCastContext & ctx) const override;
  24. virtual int calculateHealedHP(const SpellCastEnvironment * env, const BattleSpellCastParameters & parameters, SpellCastContext & ctx) const;
  25. virtual EHealLevel getHealLevel(int effectLevel) const = 0;
  26. };
  27. class DLL_LINKAGE AntimagicMechanics : public DefaultSpellMechanics
  28. {
  29. public:
  30. AntimagicMechanics(CSpell * s): DefaultSpellMechanics(s){};
  31. void applyBattle(BattleInfo * battle, const BattleSpellCast * packet) const override final;
  32. };
  33. class DLL_LINKAGE ChainLightningMechanics : public DefaultSpellMechanics
  34. {
  35. public:
  36. ChainLightningMechanics(CSpell * s): DefaultSpellMechanics(s){};
  37. std::set<const CStack *> getAffectedStacks(SpellTargetingContext & ctx) const override;
  38. };
  39. class DLL_LINKAGE CloneMechanics : public DefaultSpellMechanics
  40. {
  41. public:
  42. CloneMechanics(CSpell * s): DefaultSpellMechanics(s){};
  43. ESpellCastProblem::ESpellCastProblem isImmuneByStack(const ISpellCaster * caster, const CStack * obj) const override;
  44. protected:
  45. void applyBattleEffects(const SpellCastEnvironment * env, BattleSpellCastParameters & parameters, SpellCastContext & ctx) const override;
  46. };
  47. class DLL_LINKAGE CureMechanics : public HealingSpellMechanics
  48. {
  49. public:
  50. CureMechanics(CSpell * s): HealingSpellMechanics(s){};
  51. void applyBattle(BattleInfo * battle, const BattleSpellCast * packet) const override final;
  52. EHealLevel getHealLevel(int effectLevel) const override final;
  53. };
  54. class DLL_LINKAGE DispellMechanics : public DefaultSpellMechanics
  55. {
  56. public:
  57. DispellMechanics(CSpell * s): DefaultSpellMechanics(s){};
  58. ESpellCastProblem::ESpellCastProblem isImmuneByStack(const ISpellCaster * caster, const CStack * obj) const override;
  59. void applyBattle(BattleInfo * battle, const BattleSpellCast * packet) const override final;
  60. protected:
  61. void applyBattleEffects(const SpellCastEnvironment * env, BattleSpellCastParameters & parameters, SpellCastContext & ctx) const override;
  62. };
  63. class DLL_LINKAGE EarthquakeMechanics : public DefaultSpellMechanics
  64. {
  65. public:
  66. EarthquakeMechanics(CSpell * s): DefaultSpellMechanics(s){};
  67. ESpellCastProblem::ESpellCastProblem canBeCast(const CBattleInfoCallback * cb, PlayerColor player) const override;
  68. protected:
  69. void applyBattleEffects(const SpellCastEnvironment * env, BattleSpellCastParameters & parameters, SpellCastContext & ctx) const override;
  70. };
  71. class DLL_LINKAGE HypnotizeMechanics : public DefaultSpellMechanics
  72. {
  73. public:
  74. HypnotizeMechanics(CSpell * s): DefaultSpellMechanics(s){};
  75. ESpellCastProblem::ESpellCastProblem isImmuneByStack(const ISpellCaster * caster, const CStack * obj) const override;
  76. };
  77. class DLL_LINKAGE ObstacleMechanics : public DefaultSpellMechanics
  78. {
  79. public:
  80. ObstacleMechanics(CSpell * s): DefaultSpellMechanics(s){};
  81. protected:
  82. void applyBattleEffects(const SpellCastEnvironment * env, BattleSpellCastParameters & parameters, SpellCastContext & ctx) const override;
  83. };
  84. class DLL_LINKAGE WallMechanics : public ObstacleMechanics
  85. {
  86. public:
  87. WallMechanics(CSpell * s): ObstacleMechanics(s){};
  88. std::vector<BattleHex> rangeInHexes(BattleHex centralHex, ui8 schoolLvl, ui8 side, bool *outDroppedHexes = nullptr) const override;
  89. };
  90. class DLL_LINKAGE RemoveObstacleMechanics : public DefaultSpellMechanics
  91. {
  92. public:
  93. RemoveObstacleMechanics(CSpell * s): DefaultSpellMechanics(s){};
  94. protected:
  95. void applyBattleEffects(const SpellCastEnvironment * env, BattleSpellCastParameters & parameters, SpellCastContext & ctx) const override;
  96. };
  97. ///all rising spells
  98. class DLL_LINKAGE RisingSpellMechanics : public HealingSpellMechanics
  99. {
  100. public:
  101. RisingSpellMechanics(CSpell * s): HealingSpellMechanics(s){};
  102. EHealLevel getHealLevel(int effectLevel) const override;
  103. };
  104. class DLL_LINKAGE SacrificeMechanics : public RisingSpellMechanics
  105. {
  106. public:
  107. SacrificeMechanics(CSpell * s): RisingSpellMechanics(s){};
  108. ESpellCastProblem::ESpellCastProblem canBeCast(const CBattleInfoCallback * cb, PlayerColor player) const override;
  109. protected:
  110. void applyBattleEffects(const SpellCastEnvironment * env, BattleSpellCastParameters & parameters, SpellCastContext & ctx) const override;
  111. int calculateHealedHP(const SpellCastEnvironment * env, const BattleSpellCastParameters & parameters, SpellCastContext & ctx) const override;
  112. };
  113. ///all rising spells but SACRIFICE
  114. class DLL_LINKAGE SpecialRisingSpellMechanics : public RisingSpellMechanics
  115. {
  116. public:
  117. SpecialRisingSpellMechanics(CSpell * s): RisingSpellMechanics(s){};
  118. ESpellCastProblem::ESpellCastProblem isImmuneByStack(const ISpellCaster * caster, const CStack * obj) const override;
  119. };
  120. class DLL_LINKAGE SummonMechanics : public DefaultSpellMechanics
  121. {
  122. public:
  123. SummonMechanics(CSpell * s, CreatureID cre): DefaultSpellMechanics(s), creatureToSummon(cre){};
  124. ESpellCastProblem::ESpellCastProblem canBeCast(const CBattleInfoCallback * cb, PlayerColor player) const override;
  125. protected:
  126. void applyBattleEffects(const SpellCastEnvironment * env, BattleSpellCastParameters & parameters, SpellCastContext & ctx) const override;
  127. private:
  128. CreatureID creatureToSummon;
  129. };
  130. class DLL_LINKAGE TeleportMechanics: public DefaultSpellMechanics
  131. {
  132. public:
  133. TeleportMechanics(CSpell * s): DefaultSpellMechanics(s){};
  134. protected:
  135. void applyBattleEffects(const SpellCastEnvironment * env, BattleSpellCastParameters & parameters, SpellCastContext & ctx) const override;
  136. };