2
0

LuaSpellEffect.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * LuaSpellEffect.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 "../../lib/spells/effects/Effect.h"
  12. #include "../../lib/spells/effects/Registry.h"
  13. VCMI_LIB_NAMESPACE_BEGIN
  14. namespace scripting
  15. {
  16. class Script;
  17. class Context;
  18. }
  19. namespace spells
  20. {
  21. namespace effects
  22. {
  23. using scripting::Script;
  24. using scripting::Context;
  25. class LuaSpellEffectFactory : public IEffectFactory
  26. {
  27. public:
  28. LuaSpellEffectFactory(const Script * script_);
  29. virtual ~LuaSpellEffectFactory();
  30. Effect * create() const override;
  31. private:
  32. const Script * script;
  33. };
  34. class LuaSpellEffect : public Effect
  35. {
  36. public:
  37. LuaSpellEffect(const Script * script_);
  38. virtual ~LuaSpellEffect();
  39. void adjustTargetTypes(std::vector<TargetType> & types) const override;
  40. void adjustAffectedHexes(BattleHexArray & hexes, const Mechanics * m, const Target & spellTarget) const override;
  41. bool applicable(Problem & problem, const Mechanics * m) const override;
  42. bool applicable(Problem & problem, const Mechanics * m, const EffectTarget & target) const override;
  43. void apply(ServerCallback * server, const Mechanics * m, const EffectTarget & target) const override;
  44. EffectTarget filterTarget(const Mechanics * m, const EffectTarget & target) const override;
  45. EffectTarget transformTarget(const Mechanics * m, const Target & aimPoint, const Target & spellTarget) const override;
  46. protected:
  47. void serializeJsonEffect(JsonSerializeFormat & handler) override;
  48. private:
  49. const Script * script;
  50. std::shared_ptr<Context> resolveScript(const Mechanics * m) const;
  51. static void setContextVariables(const Mechanics * m, const std::shared_ptr<Context>& context) ;
  52. };
  53. }
  54. }
  55. VCMI_LIB_NAMESPACE_END