BattleActionProcessor.h 4.4 KB

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