BattleProcessor.h 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. ~BattleProcessor();
  47. void setGameHandler(CGameHandler * gameHandler);
  48. /// Starts battle with specified parameters
  49. void startBattlePrimary(const CArmedInstance *army1, const CArmedInstance *army2, int3 tile, const CGHeroInstance *hero1, const CGHeroInstance *hero2, bool creatureBank = false, const CGTownInstance *town = nullptr);
  50. /// Starts battle between two armies (which can also be heroes) at specified tile
  51. void startBattleI(const CArmedInstance *army1, const CArmedInstance *army2, int3 tile, bool creatureBank = false);
  52. /// Starts battle between two armies (which can also be heroes) at position of 2nd object
  53. void startBattleI(const CArmedInstance *army1, const CArmedInstance *army2, bool creatureBank = false);
  54. /// Restart ongoing battle and end previous battle
  55. 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);
  56. /// Processing of incoming battle action netpack
  57. bool makePlayerBattleAction(const BattleID & battleID, PlayerColor player, const BattleAction & ba);
  58. /// Applies results of a battle once player agrees to them
  59. void endBattleConfirm(const BattleID & battleID);
  60. /// Applies results of a battle after potential levelup
  61. void battleAfterLevelUp(const BattleID & battleID, const BattleResult & result);
  62. template <typename Handler> void serialize(Handler &h, const int version)
  63. {
  64. }
  65. };