2023-08-14 18:46:42 +02:00
/*
* BattleFlowProcessor . h , part of VCMI engine
*
* Authors : listed in file AUTHORS in main folder
*
* License : GNU General Public License v2 .0 or later
* Full text of license available in license . txt file , in main folder
*
*/
# pragma once
2024-08-11 22:22:35 +02:00
# include "../lib/battle/BattleSide.h"
2023-08-14 18:46:42 +02:00
VCMI_LIB_NAMESPACE_BEGIN
class CStack ;
struct BattleHex ;
class BattleAction ;
2023-08-28 16:43:57 +02:00
class CBattleInfoCallback ;
2023-08-14 18:46:42 +02:00
struct CObstacleInstance ;
2023-08-28 16:43:57 +02:00
namespace battle
{
class Unit ;
}
2023-08-14 18:46:42 +02:00
VCMI_LIB_NAMESPACE_END
class CGameHandler ;
class BattleProcessor ;
2023-08-17 13:56:24 +02:00
/// Controls flow of battles - battle startup actions and switching to next stack or next round after actions
2023-08-14 18:46:42 +02:00
class BattleFlowProcessor : boost : : noncopyable
{
BattleProcessor * owner ;
CGameHandler * gameHandler ;
2023-08-28 16:43:57 +02:00
const CStack * getNextStack ( const CBattleInfoCallback & battle ) ;
2023-08-14 18:46:42 +02:00
2023-08-28 16:43:57 +02:00
bool rollGoodMorale ( const CBattleInfoCallback & battle , const CStack * stack ) ;
bool tryMakeAutomaticAction ( const CBattleInfoCallback & battle , const CStack * stack ) ;
2023-08-14 18:46:42 +02:00
2024-08-11 22:22:35 +02:00
void summonGuardiansHelper ( const CBattleInfoCallback & battle , std : : vector < BattleHex > & output , const BattleHex & targetPosition , BattleSide side , bool targetIsTwoHex ) ;
2023-08-28 16:43:57 +02:00
void trySummonGuardians ( const CBattleInfoCallback & battle , const CStack * stack ) ;
void tryPlaceMoats ( const CBattleInfoCallback & battle ) ;
void castOpeningSpells ( const CBattleInfoCallback & battle ) ;
void activateNextStack ( const CBattleInfoCallback & battle ) ;
void startNextRound ( const CBattleInfoCallback & battle , bool isFirstRound ) ;
2023-08-14 18:46:42 +02:00
2023-08-28 16:43:57 +02:00
void stackEnchantedTrigger ( const CBattleInfoCallback & battle , const CStack * stack ) ;
void removeObstacle ( const CBattleInfoCallback & battle , const CObstacleInstance & obstacle ) ;
void stackTurnTrigger ( const CBattleInfoCallback & battle , const CStack * stack ) ;
void setActiveStack ( const CBattleInfoCallback & battle , const battle : : Unit * stack ) ;
2023-08-14 18:46:42 +02:00
2023-08-28 16:43:57 +02:00
void makeStackDoNothing ( const CBattleInfoCallback & battle , const CStack * next ) ;
bool makeAutomaticAction ( const CBattleInfoCallback & battle , const CStack * stack , BattleAction & ba ) ; //used when action is taken by stack without volition of player (eg. unguided catapult attack)
2023-08-14 18:46:42 +02:00
public :
2024-04-26 11:44:57 +02:00
explicit BattleFlowProcessor ( BattleProcessor * owner , CGameHandler * newGameHandler ) ;
2023-08-14 18:46:42 +02:00
2023-08-28 16:43:57 +02:00
void onBattleStarted ( const CBattleInfoCallback & battle ) ;
void onTacticsEnded ( const CBattleInfoCallback & battle ) ;
void onActionMade ( const CBattleInfoCallback & battle , const BattleAction & ba ) ;
2023-08-14 18:46:42 +02:00
} ;