PackRollbackGeneratorVisitor.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /*
  2. * PackRollbackGeneratorVisitor.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/networkPacks/NetPackVisitor.h"
  12. /// Class that generates data for rollback
  13. /// on success, canBeRolledBack() method will return true
  14. /// and rollbackPacks will contain list of packs that can be applied to rollback provided pack
  15. /// Note that it is legal for rollbackPacks list to be empty for some trivial packs
  16. class PackRollbackGeneratorVisitor final : public ICPackVisitor
  17. {
  18. private:
  19. const CGameState & gs;
  20. std::vector<std::unique_ptr<CPackForClient>> rollbackPacks;
  21. bool success = false;
  22. void visitPackageReceived(PackageReceived & pack) override;
  23. void visitPackageApplied(PackageApplied & pack) override;
  24. void visitPlayerBlocked(PlayerBlocked & pack) override;
  25. //void visitSetResources(SetResources & pack) override;
  26. //void visitSetPrimarySkill(SetPrimarySkill & pack) override;
  27. //void visitSetHeroExperience(SetHeroExperience & pack) override;
  28. //void visitGiveStackExperience(GiveStackExperience & pack) override;
  29. //void visitSetSecSkill(SetSecSkill & pack) override;
  30. void visitHeroVisitCastle(HeroVisitCastle & pack) override;
  31. //void visitSetMana(SetMana & pack) override;
  32. //void visitSetMovePoints(SetMovePoints & pack) override;
  33. //void visitSetResearchedSpells(SetResearchedSpells & pack) override;
  34. //void visitFoWChange(FoWChange & pack) override;
  35. //void visitChangeStackCount(ChangeStackCount & pack) override;
  36. //void visitSetStackType(SetStackType & pack) override;
  37. //void visitEraseStack(EraseStack & pack) override;
  38. //void visitInsertNewStack(InsertNewStack & pack) override;
  39. void visitSwapStacks(SwapStacks & pack) override;
  40. void visitRebalanceStacks(RebalanceStacks & pack) override;
  41. void visitBulkRebalanceStacks(BulkRebalanceStacks & pack) override;
  42. //void visitGrowUpArtifact(GrowUpArtifact & pack) override;
  43. //void visitPutArtifact(PutArtifact & pack) override;
  44. //void visitBulkEraseArtifacts(BulkEraseArtifacts & pack) override;
  45. //void visitBulkMoveArtifacts(BulkMoveArtifacts & pack) override;
  46. //void visitAssembledArtifact(AssembledArtifact & pack) override;
  47. //void visitDisassembledArtifact(DisassembledArtifact & pack) override;
  48. //void visitDischargeArtifact(DischargeArtifact & pack) override;
  49. //void visitHeroVisit(HeroVisit & pack) override;
  50. //void visitNewTurn(NewTurn & pack) override;
  51. //void visitGiveBonus(GiveBonus & pack) override;
  52. //void visitChangeObjPos(ChangeObjPos & pack) override;
  53. //void visitPlayerEndsTurn(PlayerEndsTurn & pack) override;
  54. //void visitPlayerEndsGame(PlayerEndsGame & pack) override;
  55. //void visitRemoveBonus(RemoveBonus & pack) override;
  56. //void visitRemoveObject(RemoveObject & pack) override;
  57. void visitTryMoveHero(TryMoveHero & pack) override;
  58. //void visitNewStructures(NewStructures & pack) override;
  59. //void visitRazeStructures(RazeStructures & pack) override;
  60. //void visitSetAvailableCreatures(SetAvailableCreatures & pack) override;
  61. //void visitSetHeroesInTown(SetHeroesInTown & pack) override;
  62. //void visitHeroRecruited(HeroRecruited & pack) override;
  63. //void visitGiveHero(GiveHero & pack) override;
  64. //void visitSetObjectProperty(SetObjectProperty & pack) override;
  65. //void visitHeroLevelUp(HeroLevelUp & pack) override;
  66. //void visitCommanderLevelUp(CommanderLevelUp & pack) override;
  67. //void visitBattleStart(BattleStart & pack) override;
  68. //void visitBattleSetActiveStack(BattleSetActiveStack & pack) override;
  69. //void visitBattleTriggerEffect(BattleTriggerEffect & pack) override;
  70. //void visitBattleAttack(BattleAttack & pack) override;
  71. //void visitBattleSpellCast(BattleSpellCast & pack) override;
  72. //void visitSetStackEffect(SetStackEffect & pack) override;
  73. //void visitStacksInjured(StacksInjured & pack) override;
  74. //void visitBattleUnitsChanged(BattleUnitsChanged & pack) override;
  75. //void visitBattleObstaclesChanged(BattleObstaclesChanged & pack) override;
  76. //void visitBattleStackMoved(BattleStackMoved & pack) override;
  77. //void visitCatapultAttack(CatapultAttack & pack) override;
  78. //void visitPlayerStartsTurn(PlayerStartsTurn & pack) override;
  79. //void visitNewObject(NewObject & pack) override;
  80. //void visitSetAvailableArtifacts(SetAvailableArtifacts & pack) override;
  81. //void visitEntitiesChanged(EntitiesChanged & pack) override;
  82. //void visitSetCommanderProperty(SetCommanderProperty & pack) override;
  83. //void visitAddQuest(AddQuest & pack) override;
  84. //void visitChangeFormation(ChangeFormation & pack) override;
  85. //void visitChangeSpells(ChangeSpells & pack) override;
  86. //void visitSetAvailableHero(SetAvailableHero & pack) override;
  87. //void visitChangeObjectVisitors(ChangeObjectVisitors & pack) override;
  88. //void visitChangeArtifactsCostume(ChangeArtifactsCostume & pack) override;
  89. //void visitNewArtifact(NewArtifact & pack) override;
  90. //void visitBattleUpdateGateState(BattleUpdateGateState & pack) override;
  91. //void visitPlayerCheated(PlayerCheated & pack) override;
  92. //void visitDaysWithoutTown(DaysWithoutTown & pack) override;
  93. //void visitStartAction(StartAction & pack) override;
  94. //void visitSetRewardableConfiguration(SetRewardableConfiguration & pack) override;
  95. //void visitBattleSetStackProperty(BattleSetStackProperty & pack) override;
  96. //void visitBattleNextRound(BattleNextRound & pack) override;
  97. //void visitBattleCancelled(BattleCancelled & pack) override;
  98. //void visitBattleResultsApplied(BattleResultsApplied & pack) override;
  99. //void visitBattleResultAccepted(BattleResultAccepted & pack) override;
  100. //void visitTurnTimeUpdate(TurnTimeUpdate & pack) override;
  101. public:
  102. PackRollbackGeneratorVisitor(const CGameState & gs)
  103. : gs(gs)
  104. {
  105. }
  106. /// Returns true if tested pack can be rolled back
  107. bool canBeRolledBack() const;
  108. /// Acquires list of packs that can be used to rollback tested pack
  109. /// (!) non-reentrable
  110. std::vector<std::unique_ptr<CPackForClient>> acquireRollbackPacks();
  111. };