BattleActionProcessor.h 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * BattleActionProcessor.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. VCMI_LIB_NAMESPACE_BEGIN
  12. struct BattleLogMessage;
  13. struct BattleAttack;
  14. class BattleAction;
  15. class CBattleInfoCallback;
  16. struct BattleHex;
  17. class CStack;
  18. class PlayerColor;
  19. enum class BonusType;
  20. namespace battle
  21. {
  22. class Unit;
  23. class CUnitState;
  24. }
  25. VCMI_LIB_NAMESPACE_END
  26. class CGameHandler;
  27. class BattleProcessor;
  28. /// Processes incoming battle action queries and applies requested action(s)
  29. class BattleActionProcessor : boost::noncopyable
  30. {
  31. using FireShieldInfo = std::vector<std::pair<const CStack *, int64_t>>;
  32. BattleProcessor * owner;
  33. CGameHandler * gameHandler;
  34. int moveStack(const CBattleInfoCallback & battle, int stack, BattleHex dest); //returned value - travelled distance
  35. void makeAttack(const CBattleInfoCallback & battle, const CStack * attacker, const CStack * defender, int distance, BattleHex targetHex, bool first, bool ranged, bool counter);
  36. void handleAttackBeforeCasting(const CBattleInfoCallback & battle, bool ranged, const CStack * attacker, const CStack * defender);
  37. void handleAfterAttackCasting(const CBattleInfoCallback & battle, bool ranged, const CStack * attacker, const CStack * defender);
  38. void attackCasting(const CBattleInfoCallback & battle, bool ranged, BonusType attackMode, const battle::Unit * attacker, const battle::Unit * defender);
  39. // damage, drain life & fire shield; returns amount of drained life
  40. int64_t applyBattleEffects(const CBattleInfoCallback & battle, BattleAttack & bat, std::shared_ptr<battle::CUnitState> attackerState, FireShieldInfo & fireShield, const CStack * def, int distance, bool secondary);
  41. void sendGenericKilledLog(const CBattleInfoCallback & battle, const CStack * defender, int32_t killed, bool multiple);
  42. void addGenericKilledLog(BattleLogMessage & blm, const CStack * defender, int32_t killed, bool multiple);
  43. bool canStackAct(const CBattleInfoCallback & battle, const CStack * stack);
  44. bool doEmptyAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  45. bool doEndTacticsAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  46. bool doRetreatAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  47. bool doSurrenderAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  48. bool doHeroSpellAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  49. bool doWalkAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  50. bool doWaitAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  51. bool doDefendAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  52. bool doAttackAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  53. bool doShootAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  54. bool doCatapultAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  55. bool doUnitSpellAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  56. bool doHealAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  57. bool dispatchBattleAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  58. bool makeBattleActionImpl(const CBattleInfoCallback & battle, const BattleAction & ba);
  59. public:
  60. explicit BattleActionProcessor(BattleProcessor * owner);
  61. void setGameHandler(CGameHandler * newGameHandler);
  62. bool makeAutomaticBattleAction(const CBattleInfoCallback & battle, const BattleAction & ba);
  63. bool makePlayerBattleAction(const CBattleInfoCallback & battle, PlayerColor player, const BattleAction & ba);
  64. };