mirror of
https://github.com/vcmi/vcmi.git
synced 2025-02-03 13:01:33 +02:00
BattlePhases enum moved to Unit.h
This commit is contained in:
parent
0373febe6f
commit
7421fabf2c
@ -355,15 +355,6 @@ battle::Units CBattleInfoCallback::battleAliveUnits(ui8 side) const
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
enum BattlePhases
|
|
||||||
{
|
|
||||||
SIEGE, // [0] - turrets/catapult,
|
|
||||||
NORMAL, // [1] - normal (unmoved) creatures, other war machines,
|
|
||||||
WAIT_MORALE, // [2] - waited creatures that had morale,
|
|
||||||
WAIT, // [3] - rest of waited creatures
|
|
||||||
MAX_NO_OF_PHASES // [4] - number of phases.
|
|
||||||
};
|
|
||||||
|
|
||||||
//T is battle::Unit descendant
|
//T is battle::Unit descendant
|
||||||
template <typename T>
|
template <typename T>
|
||||||
const T * takeOneUnit(std::vector<const T*> & allUnits, const int turn, int8_t & sideThatLastMoved, int phase)
|
const T * takeOneUnit(std::vector<const T*> & allUnits, const int turn, int8_t & sideThatLastMoved, int phase)
|
||||||
@ -387,7 +378,7 @@ const T * takeOneUnit(std::vector<const T*> & allUnits, const int turn, int8_t &
|
|||||||
|
|
||||||
switch(phase)
|
switch(phase)
|
||||||
{
|
{
|
||||||
case NORMAL: // Faster first, attacker priority, higher slot first
|
case battle::NORMAL: // Faster first, attacker priority, higher slot first
|
||||||
if(returnedUnit == nullptr || currentUnitInitiative > returnedUnitInitiative)
|
if(returnedUnit == nullptr || currentUnitInitiative > returnedUnitInitiative)
|
||||||
{
|
{
|
||||||
returnedUnit = currentUnit;
|
returnedUnit = currentUnit;
|
||||||
@ -409,8 +400,8 @@ const T * takeOneUnit(std::vector<const T*> & allUnits, const int turn, int8_t &
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WAIT_MORALE: // Slower first, higher slot first
|
case battle::WAIT_MORALE: // Slower first, higher slot first
|
||||||
case WAIT:
|
case battle::WAIT:
|
||||||
if(returnedUnit == nullptr || currentUnitInitiative < returnedUnitInitiative)
|
if(returnedUnit == nullptr || currentUnitInitiative < returnedUnitInitiative)
|
||||||
{
|
{
|
||||||
returnedUnit = currentUnit;
|
returnedUnit = currentUnit;
|
||||||
@ -462,11 +453,11 @@ void CBattleInfoCallback::battleGetTurnOrder(std::vector<battle::Units> & turns,
|
|||||||
turns.emplace_back();
|
turns.emplace_back();
|
||||||
|
|
||||||
// We'll split creatures with remaining movement to 4 buckets
|
// We'll split creatures with remaining movement to 4 buckets
|
||||||
// [0] - turrets/catapult,
|
// [0] SIEGE - turrets/catapult,
|
||||||
// [1] - normal (unmoved) creatures, other war machines,
|
// [1] NORMAL - normal (unmoved) creatures, other war machines,
|
||||||
// [2] - waited creatures that had morale,
|
// [2] WAIT_MORALE - waited creatures that had morale,
|
||||||
// [3] - rest of waited creatures
|
// [3] WAIT - rest of waited creatures
|
||||||
std::array<battle::Units, MAX_NO_OF_PHASES> phases;
|
std::array<battle::Units, battle::MAX_NO_OF_PHASES> phases; // Access using BattlePhases enum
|
||||||
|
|
||||||
const battle::Unit * activeUnit = battleActiveUnit();
|
const battle::Unit * activeUnit = battleActiveUnit();
|
||||||
|
|
||||||
@ -512,17 +503,17 @@ void CBattleInfoCallback::battleGetTurnOrder(std::vector<battle::Units> & turns,
|
|||||||
phases[unitPhase].push_back(unit);
|
phases[unitPhase].push_back(unit);
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::sort(phases[SIEGE], CMP_stack(SIEGE, actualTurn, sideThatLastMoved));
|
boost::sort(phases[battle::SIEGE], CMP_stack(battle::SIEGE, actualTurn, sideThatLastMoved));
|
||||||
std::copy(phases[SIEGE].begin(), phases[SIEGE].end(), std::back_inserter(turns.back()));
|
std::copy(phases[battle::SIEGE].begin(), phases[battle::SIEGE].end(), std::back_inserter(turns.back()));
|
||||||
|
|
||||||
if(turnsIsFull())
|
if(turnsIsFull())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for(int phase = NORMAL; phase < MAX_NO_OF_PHASES; phase++)
|
for(int phase = battle::NORMAL; phase < battle::MAX_NO_OF_PHASES; phase++)
|
||||||
boost::sort(phases[phase], CMP_stack(phase, actualTurn, sideThatLastMoved));
|
boost::sort(phases[phase], CMP_stack(phase, actualTurn, sideThatLastMoved));
|
||||||
|
|
||||||
int phase = NORMAL;
|
int phase = battle::NORMAL;
|
||||||
while(!turnsIsFull() && phase < MAX_NO_OF_PHASES)
|
while(!turnsIsFull() && phase < battle::MAX_NO_OF_PHASES)
|
||||||
{
|
{
|
||||||
const battle::Unit * currentUnit = nullptr;
|
const battle::Unit * currentUnit = nullptr;
|
||||||
if(phases[phase].empty())
|
if(phases[phase].empty())
|
||||||
|
@ -609,31 +609,22 @@ bool CUnitState::waited(int turn) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CUnitState::battleQueuePhase(int turn) const
|
BattlePhases CUnitState::battleQueuePhase(int turn) const
|
||||||
{
|
{
|
||||||
enum BattlePhases
|
|
||||||
{
|
|
||||||
SIEGE, // [0] - turrets/catapult,
|
|
||||||
NORMAL, // [1] - normal (unmoved) creatures, other war machines,
|
|
||||||
WAIT_MORALE, // [2] - waited creatures that had morale,
|
|
||||||
WAIT, // [3] - rest of waited creatures
|
|
||||||
MAX_NO_OF_PHASES // [4] - number of phases. Can be used in for loops.
|
|
||||||
};
|
|
||||||
|
|
||||||
if(turn <= 0 && waited()) //consider waiting state only for ongoing round
|
if(turn <= 0 && waited()) //consider waiting state only for ongoing round
|
||||||
{
|
{
|
||||||
if(hadMorale)
|
if(hadMorale)
|
||||||
return WAIT_MORALE;
|
return battle::WAIT_MORALE;
|
||||||
else
|
else
|
||||||
return WAIT;
|
return battle::WAIT;
|
||||||
}
|
}
|
||||||
else if(creatureIndex() == CreatureID::CATAPULT || isTurret()) //catapult and turrets are first
|
else if(creatureIndex() == CreatureID::CATAPULT || isTurret()) //catapult and turrets are first
|
||||||
{
|
{
|
||||||
return SIEGE;
|
return battle::SIEGE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return NORMAL;
|
return battle::NORMAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,7 +225,7 @@ public:
|
|||||||
std::shared_ptr<Unit> acquire() const override;
|
std::shared_ptr<Unit> acquire() const override;
|
||||||
std::shared_ptr<CUnitState> acquireState() const override;
|
std::shared_ptr<CUnitState> acquireState() const override;
|
||||||
|
|
||||||
int battleQueuePhase(int turn) const override;
|
BattlePhases battleQueuePhase(int turn) const override;
|
||||||
|
|
||||||
int getTotalAttacks(bool ranged) const override;
|
int getTotalAttacks(bool ranged) const override;
|
||||||
|
|
||||||
|
@ -25,6 +25,16 @@ class JsonSerializeFormat;
|
|||||||
|
|
||||||
namespace battle
|
namespace battle
|
||||||
{
|
{
|
||||||
|
|
||||||
|
enum BattlePhases
|
||||||
|
{
|
||||||
|
SIEGE, // [0] - turrets/catapult,
|
||||||
|
NORMAL, // [1] - normal (unmoved) creatures, other war machines,
|
||||||
|
WAIT_MORALE, // [2] - waited creatures that had morale,
|
||||||
|
WAIT, // [3] - rest of waited creatures
|
||||||
|
MAX_NO_OF_PHASES // [4] - number of phases.
|
||||||
|
};
|
||||||
|
|
||||||
class CUnitState;
|
class CUnitState;
|
||||||
|
|
||||||
class DLL_LINKAGE Unit : public IUnitInfo, public spells::Caster, public virtual IBonusBearer
|
class DLL_LINKAGE Unit : public IUnitInfo, public spells::Caster, public virtual IBonusBearer
|
||||||
@ -79,7 +89,7 @@ public:
|
|||||||
virtual std::shared_ptr<Unit> acquire() const = 0;
|
virtual std::shared_ptr<Unit> acquire() const = 0;
|
||||||
virtual std::shared_ptr<CUnitState> acquireState() const = 0;
|
virtual std::shared_ptr<CUnitState> acquireState() const = 0;
|
||||||
|
|
||||||
virtual int battleQueuePhase(int turn) const = 0;
|
virtual BattlePhases battleQueuePhase(int turn) const = 0;
|
||||||
|
|
||||||
virtual std::string getDescription() const;
|
virtual std::string getDescription() const;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user