AdventureSpellEffect.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*
  2. * AdventureSpellEffect.cpp, 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. #include "StdInc.h"
  11. #include "AdventureSpellEffect.h"
  12. #include "../../json/JsonNode.h"
  13. #include "../../mapObjects/CGHeroInstance.h"
  14. #include "../../callback/IGameInfoCallback.h"
  15. VCMI_LIB_NAMESPACE_BEGIN
  16. AdventureSpellRangedEffect::AdventureSpellRangedEffect(const JsonNode & config)
  17. : rangeX(config["rangeX"].Integer())
  18. , rangeY(config["rangeY"].Integer())
  19. , ignoreFow(config["ignoreFow"].Bool())
  20. {
  21. }
  22. bool AdventureSpellRangedEffect::isTargetInRange(const IGameInfoCallback * cb, const spells::Caster * caster, const int3 & pos) const
  23. {
  24. if(!cb->isInTheMap(pos))
  25. return false;
  26. if(caster->getHeroCaster())
  27. {
  28. int3 center = caster->getHeroCaster()->getSightCenter();
  29. int3 diff = pos - center;
  30. return diff.x >= -rangeX && diff.x <= rangeX && diff.y >= -rangeY && diff.y <= rangeY;
  31. }
  32. if(!ignoreFow && !cb->isVisibleFor(pos, caster->getCasterOwner()))
  33. return false;
  34. return true;
  35. }
  36. VCMI_LIB_NAMESPACE_END