mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-26 22:57:00 +02:00
2a05fbdd50
- Replaced BattleSide namespace-enum with enum class - Merged two different BattleSide enum's into one - Merged BattlePerspective enum into BattleSide enum - Changed all places that use integers to represent battle side to use BattleSide enum - Added BattleSideArray convenience wrapper for std::array that is always 2-elements in size and allows access to its elements using BattleSide enum
62 lines
2.4 KiB
C++
62 lines
2.4 KiB
C++
/*
|
|
* 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
|
|
|
|
#include "../lib/battle/BattleSide.h"
|
|
|
|
VCMI_LIB_NAMESPACE_BEGIN
|
|
class CStack;
|
|
struct BattleHex;
|
|
class BattleAction;
|
|
class CBattleInfoCallback;
|
|
struct CObstacleInstance;
|
|
namespace battle
|
|
{
|
|
class Unit;
|
|
}
|
|
VCMI_LIB_NAMESPACE_END
|
|
|
|
class CGameHandler;
|
|
class BattleProcessor;
|
|
|
|
/// Controls flow of battles - battle startup actions and switching to next stack or next round after actions
|
|
class BattleFlowProcessor : boost::noncopyable
|
|
{
|
|
BattleProcessor * owner;
|
|
CGameHandler * gameHandler;
|
|
|
|
const CStack * getNextStack(const CBattleInfoCallback & battle);
|
|
|
|
bool rollGoodMorale(const CBattleInfoCallback & battle, const CStack * stack);
|
|
bool tryMakeAutomaticAction(const CBattleInfoCallback & battle, const CStack * stack);
|
|
|
|
void summonGuardiansHelper(const CBattleInfoCallback & battle, std::vector<BattleHex> & output, const BattleHex & targetPosition, BattleSide side, bool targetIsTwoHex);
|
|
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);
|
|
|
|
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);
|
|
|
|
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)
|
|
|
|
public:
|
|
explicit BattleFlowProcessor(BattleProcessor * owner, CGameHandler * newGameHandler);
|
|
|
|
void onBattleStarted(const CBattleInfoCallback & battle);
|
|
void onTacticsEnded(const CBattleInfoCallback & battle);
|
|
void onActionMade(const CBattleInfoCallback & battle, const BattleAction & ba);
|
|
};
|