BattleProcessor.h 3.1 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. VCMI_LIB_NAMESPACE_BEGIN
  13. class CGHeroInstance;
  14. class CGTownInstance;
  15. class CArmedInstance;
  16. class BattleAction;
  17. class int3;
  18. class CBattleInfoCallback;
  19. struct BattleResult;
  20. class BattleID;
  21. VCMI_LIB_NAMESPACE_END
  22. class CGameHandler;
  23. class CBattleQuery;
  24. class BattleActionProcessor;
  25. class BattleFlowProcessor;
  26. class BattleResultProcessor;
  27. /// Main class for battle handling. Contains all public interface for battles that is accessible from outside, e.g. for CGameHandler
  28. class BattleProcessor : boost::noncopyable
  29. {
  30. friend class BattleActionProcessor;
  31. friend class BattleFlowProcessor;
  32. friend class BattleResultProcessor;
  33. CGameHandler * gameHandler;
  34. std::unique_ptr<BattleActionProcessor> actionsProcessor;
  35. std::unique_ptr<BattleFlowProcessor> flowProcessor;
  36. std::unique_ptr<BattleResultProcessor> resultProcessor;
  37. void updateGateState(const CBattleInfoCallback & battle);
  38. void engageIntoBattle(PlayerColor player);
  39. bool checkBattleStateChanges(const CBattleInfoCallback & battle);
  40. BattleID setupBattle(int3 tile, const CArmedInstance *armies[2], const CGHeroInstance *heroes[2], bool creatureBank, const CGTownInstance *town);
  41. bool makeAutomaticBattleAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  42. void setBattleResult(const CBattleInfoCallback & battle, EBattleResult resultType, int victoriusSide);
  43. public:
  44. explicit BattleProcessor(CGameHandler * gameHandler);
  45. ~BattleProcessor();
  46. /// Starts battle with specified parameters
  47. void startBattlePrimary(const CArmedInstance *army1, const CArmedInstance *army2, int3 tile, const CGHeroInstance *hero1, const CGHeroInstance *hero2, bool creatureBank = false, const CGTownInstance *town = nullptr);
  48. /// Starts battle between two armies (which can also be heroes) at specified tile
  49. void startBattleI(const CArmedInstance *army1, const CArmedInstance *army2, int3 tile, bool creatureBank = false);
  50. /// Starts battle between two armies (which can also be heroes) at position of 2nd object
  51. void startBattleI(const CArmedInstance *army1, const CArmedInstance *army2, bool creatureBank = false);
  52. /// Restart ongoing battle and end previous battle
  53. void restartBattlePrimary(const BattleID & battleID, const CArmedInstance *army1, const CArmedInstance *army2, int3 tile, const CGHeroInstance *hero1, const CGHeroInstance *hero2, bool creatureBank = false, const CGTownInstance *town = nullptr);
  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. };