BattleProcessor.h 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. * BattleProcessor.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/GameConstants.h"
  12. #include "../../lib/battle/BattleSide.h"
  13. VCMI_LIB_NAMESPACE_BEGIN
  14. class CGHeroInstance;
  15. class CGTownInstance;
  16. class CArmedInstance;
  17. class BattleAction;
  18. class int3;
  19. class CBattleInfoCallback;
  20. struct BattleResult;
  21. struct BattleLayout;
  22. class BattleID;
  23. VCMI_LIB_NAMESPACE_END
  24. class CGameHandler;
  25. class CBattleQuery;
  26. class BattleActionProcessor;
  27. class BattleFlowProcessor;
  28. class BattleResultProcessor;
  29. /// Main class for battle handling. Contains all public interface for battles that is accessible from outside, e.g. for CGameHandler
  30. class BattleProcessor : boost::noncopyable
  31. {
  32. friend class BattleActionProcessor;
  33. friend class BattleFlowProcessor;
  34. friend class BattleResultProcessor;
  35. CGameHandler * gameHandler;
  36. std::unique_ptr<BattleActionProcessor> actionsProcessor;
  37. std::unique_ptr<BattleFlowProcessor> flowProcessor;
  38. std::unique_ptr<BattleResultProcessor> resultProcessor;
  39. void updateGateState(const CBattleInfoCallback & battle);
  40. void engageIntoBattle(PlayerColor player);
  41. bool checkBattleStateChanges(const CBattleInfoCallback & battle);
  42. BattleID setupBattle(int3 tile, BattleSideArray<const CArmedInstance *> armies, BattleSideArray<const CGHeroInstance *> heroes, const BattleLayout & layout, const CGTownInstance *town);
  43. bool makeAutomaticBattleAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  44. void setBattleResult(const CBattleInfoCallback & battle, EBattleResult resultType, BattleSide victoriusSide);
  45. public:
  46. explicit BattleProcessor(CGameHandler * gameHandler);
  47. ~BattleProcessor();
  48. /// Starts battle with specified parameters
  49. void startBattle(const CArmedInstance *army1, const CArmedInstance *army2, int3 tile, const CGHeroInstance *hero1, const CGHeroInstance *hero2, const BattleLayout & layout, const CGTownInstance *town);
  50. /// Starts battle between two armies (which can also be heroes) at position of 2nd object
  51. void startBattle(const CArmedInstance *army1, const CArmedInstance *army2);
  52. /// Restart ongoing battle and end previous battle
  53. void restartBattle(const BattleID & battleID, const CArmedInstance *army1, const CArmedInstance *army2, int3 tile, const CGHeroInstance *hero1, const CGHeroInstance *hero2, const BattleLayout & layout, const CGTownInstance *town);
  54. /// Processing of incoming battle action netpack
  55. bool makePlayerBattleAction(const BattleID & battleID, PlayerColor player, const BattleAction & ba);
  56. /// Applies results of a battle once player agrees to them
  57. void endBattleConfirm(const BattleID & battleID);
  58. /// Applies results of a battle after potential levelup
  59. void battleAfterLevelUp(const BattleID & battleID, const BattleResult & result);
  60. template <typename Handler> void serialize(Handler &h)
  61. {
  62. }
  63. };