StayAtTown.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * ArmyUpgrade.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 "StayAtTown.h"
  12. #include "../AIGateway.h"
  13. #include "../Engine/Nullkiller.h"
  14. #include "../AIUtility.h"
  15. namespace NKAI
  16. {
  17. using namespace Goals;
  18. StayAtTown::StayAtTown(const CGTownInstance * town, AIPath & path)
  19. : ElementarGoal(Goals::STAY_AT_TOWN)
  20. {
  21. sethero(path.targetHero);
  22. settown(town);
  23. movementWasted = static_cast<float>(hero->movementPointsRemaining()) / hero->movementPointsLimit(!hero->boat) - path.movementCost();
  24. vstd::amax(movementWasted, 0);
  25. }
  26. bool StayAtTown::operator==(const StayAtTown & other) const
  27. {
  28. return hero == other.hero && town == other.town;
  29. }
  30. std::string StayAtTown::toString() const
  31. {
  32. return "Stay at town " + town->getNameTranslated()
  33. + " hero " + hero->getNameTranslated()
  34. + ", mana: " + std::to_string(hero->mana);
  35. }
  36. void StayAtTown::accept(AIGateway * ai)
  37. {
  38. if(hero->visitedTown != town)
  39. {
  40. logAi->error("Hero %s expected visiting town %s", hero->getNameTranslated(), town->getNameTranslated());
  41. }
  42. ai->nullkiller->lockHero(hero.get(), HeroLockedReason::DEFENCE);
  43. }
  44. }