BattleActionProcessor.h 3.9 KB

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