FlaggableMapObject.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /*
  2. * FlaggableMapObject.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 "FlaggableMapObject.h"
  12. #include "CGHeroInstance.h"
  13. #include "../CPlayerState.h"
  14. #include "../callback/IGameInfoCallback.h"
  15. #include "../callback/IGameEventCallback.h"
  16. #include "../gameState/CGameState.h"
  17. #include "../mapObjectConstructors/FlaggableInstanceConstructor.h"
  18. #include "../networkPacks/PacksForClient.h"
  19. VCMI_LIB_NAMESPACE_BEGIN
  20. FlaggableMapObject::FlaggableMapObject(IGameInfoCallback *cb)
  21. :CGObjectInstance(cb)
  22. ,CBonusSystemNode(BonusNodeType::UNKNOWN)
  23. {}
  24. const IOwnableObject * FlaggableMapObject::asOwnable() const
  25. {
  26. return this;
  27. }
  28. ResourceSet FlaggableMapObject::dailyIncome() const
  29. {
  30. return getFlaggableHandler()->getDailyIncome();
  31. }
  32. std::vector<CreatureID> FlaggableMapObject::providedCreatures() const
  33. {
  34. return {};
  35. }
  36. void FlaggableMapObject::onHeroVisit(IGameEventCallback & gameEvents, const CGHeroInstance * h) const
  37. {
  38. if (cb->getPlayerRelations(h->getOwner(), getOwner()) != PlayerRelations::ENEMIES)
  39. return; // H3 behavior - revisiting owned Lighthouse is a no-op
  40. gameEvents.setOwner(this, h->getOwner()); //not ours? flag it!
  41. InfoWindow iw;
  42. iw.player = h->getOwner();
  43. iw.text.appendTextID(getFlaggableHandler()->getVisitMessageTextID());
  44. gameEvents.showInfoDialog(&iw);
  45. }
  46. void FlaggableMapObject::initObj(IGameRandomizer & gameRandomizer)
  47. {
  48. initBonuses();
  49. }
  50. std::shared_ptr<FlaggableInstanceConstructor> FlaggableMapObject::getFlaggableHandler() const
  51. {
  52. return std::dynamic_pointer_cast<FlaggableInstanceConstructor>(getObjectHandler());
  53. }
  54. void FlaggableMapObject::initBonuses()
  55. {
  56. for (auto const & bonus : getFlaggableHandler()->getProvidedBonuses())
  57. addNewBonus(bonus);
  58. }
  59. void FlaggableMapObject::serializeJsonOptions(JsonSerializeFormat& handler)
  60. {
  61. serializeJsonOwner(handler);
  62. }
  63. void FlaggableMapObject::attachToBonusSystem(CGameState & gs)
  64. {
  65. if (getOwner().isValidPlayer())
  66. attachTo(*gs.getPlayerState(getOwner()));
  67. }
  68. void FlaggableMapObject::detachFromBonusSystem(CGameState & gs)
  69. {
  70. if (getOwner().isValidPlayer())
  71. detachFrom(*gs.getPlayerState(getOwner()));
  72. }
  73. void FlaggableMapObject::restoreBonusSystem(CGameState & gs)
  74. {
  75. attachToBonusSystem(gs);
  76. }
  77. VCMI_LIB_NAMESPACE_END