AdventureSpellMechanics.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*
  2. * AdventureSpellMechanics.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. VCMI_LIB_NAMESPACE_BEGIN
  13. enum class ESpellCastResult
  14. {
  15. OK, // cast successful
  16. CANCEL, // cast failed but it is not an error, no mana has been spent
  17. PENDING,
  18. ERROR // error occurred, for example invalid request from player
  19. };
  20. class AdventureSpellMechanics : public IAdventureSpellMechanics
  21. {
  22. public:
  23. AdventureSpellMechanics(const CSpell * s);
  24. bool canBeCast(spells::Problem & problem, const IGameInfoCallback * cb, const spells::Caster * caster) const final;
  25. bool canBeCastAt(spells::Problem & problem, const IGameInfoCallback * cb, const spells::Caster * caster, const int3 & pos) const final;
  26. bool adventureCast(SpellCastEnvironment * env, const AdventureSpellCastParameters & parameters) const override final;
  27. protected:
  28. ///actual adventure cast implementation
  29. virtual ESpellCastResult applyAdventureEffects(SpellCastEnvironment * env, const AdventureSpellCastParameters & parameters) const;
  30. virtual ESpellCastResult beginCast(SpellCastEnvironment * env, const AdventureSpellCastParameters & parameters) const;
  31. virtual void endCast(SpellCastEnvironment * env, const AdventureSpellCastParameters & parameters) const;
  32. virtual bool canBeCastImpl(spells::Problem & problem, const IGameInfoCallback * cb, const spells::Caster * caster) const;
  33. virtual bool canBeCastAtImpl(spells::Problem & problem, const IGameInfoCallback * cb, const spells::Caster * caster, const int3 & pos) const;
  34. void performCast(SpellCastEnvironment * env, const AdventureSpellCastParameters & parameters) const;
  35. };
  36. VCMI_LIB_NAMESPACE_END