mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-26 22:57:00 +02:00
Simplify getAffectedStacks arguments. casterColor not needed anymore.
This commit is contained in:
parent
f6715ad787
commit
d4a35c6839
@ -458,7 +458,7 @@ void CBattleAI::attemptCastingSpell()
|
|||||||
{
|
{
|
||||||
int damageDealt = 0, damageReceived = 0;
|
int damageDealt = 0, damageReceived = 0;
|
||||||
|
|
||||||
auto stacksSuffering = ps.spell->getAffectedStacks(cb.get(), ECastingMode::HERO_CASTING, playerID, skillLevel, ps.dest, hero);
|
auto stacksSuffering = ps.spell->getAffectedStacks(cb.get(), ECastingMode::HERO_CASTING, hero, skillLevel, ps.dest);
|
||||||
|
|
||||||
if(stacksSuffering.empty())
|
if(stacksSuffering.empty())
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -272,7 +272,7 @@ void DefaultSpellMechanics::battleCast(const SpellCastEnvironment * env, BattleS
|
|||||||
//must be vector, as in Chain Lightning order matters
|
//must be vector, as in Chain Lightning order matters
|
||||||
std::vector<const CStack*> attackedCres; //CStack vector is somewhat more suitable than ID vector
|
std::vector<const CStack*> attackedCres; //CStack vector is somewhat more suitable than ID vector
|
||||||
|
|
||||||
auto creatures = owner->getAffectedStacks(parameters.cb, parameters.mode, parameters.casterColor, parameters.spellLvl, parameters.getFirstDestinationHex(), parameters.caster);
|
auto creatures = owner->getAffectedStacks(parameters.cb, parameters.mode, parameters.caster, parameters.spellLvl, parameters.getFirstDestinationHex());
|
||||||
std::copy(creatures.begin(), creatures.end(), std::back_inserter(attackedCres));
|
std::copy(creatures.begin(), creatures.end(), std::back_inserter(attackedCres));
|
||||||
|
|
||||||
logGlobal->debugStream() << "will affect: " << attackedCres.size() << " stacks";
|
logGlobal->debugStream() << "will affect: " << attackedCres.size() << " stacks";
|
||||||
@ -672,7 +672,7 @@ std::set<const CStack *> DefaultSpellMechanics::getAffectedStacks(SpellTargeting
|
|||||||
{
|
{
|
||||||
std::set<const CStack* > attackedCres;//std::set to exclude multiple occurrences of two hex creatures
|
std::set<const CStack* > attackedCres;//std::set to exclude multiple occurrences of two hex creatures
|
||||||
|
|
||||||
const ui8 attackerSide = ctx.cb->playerToSide(ctx.casterColor) == 1;
|
const ui8 attackerSide = ctx.cb->playerToSide(ctx.caster->getOwner()) == 1;
|
||||||
const auto attackedHexes = rangeInHexes(ctx.destination, ctx.schoolLvl, attackerSide);
|
const auto attackedHexes = rangeInHexes(ctx.destination, ctx.schoolLvl, attackerSide);
|
||||||
|
|
||||||
const CSpell::TargetInfo ti(owner, ctx.schoolLvl, ctx.mode);
|
const CSpell::TargetInfo ti(owner, ctx.schoolLvl, ctx.mode);
|
||||||
@ -691,8 +691,8 @@ std::set<const CStack *> DefaultSpellMechanics::getAffectedStacks(SpellTargeting
|
|||||||
else if(ti.type == CSpell::CREATURE)
|
else if(ti.type == CSpell::CREATURE)
|
||||||
{
|
{
|
||||||
auto predicate = [=](const CStack * s){
|
auto predicate = [=](const CStack * s){
|
||||||
const bool positiveToAlly = owner->isPositive() && s->owner == ctx.casterColor;
|
const bool positiveToAlly = owner->isPositive() && s->owner == ctx.caster->getOwner();
|
||||||
const bool negativeToEnemy = owner->isNegative() && s->owner != ctx.casterColor;
|
const bool negativeToEnemy = owner->isNegative() && s->owner != ctx.caster->getOwner();
|
||||||
const bool validTarget = s->isValidTarget(!ti.onlyAlive); //todo: this should be handled by spell class
|
const bool validTarget = s->isValidTarget(!ti.onlyAlive); //todo: this should be handled by spell class
|
||||||
|
|
||||||
//for single target spells select stacks covering destination tile
|
//for single target spells select stacks covering destination tile
|
||||||
@ -796,7 +796,7 @@ void DefaultSpellMechanics::castMagicMirror(const SpellCastEnvironment* env, Bat
|
|||||||
//must be vector, as in Chain Lightning order matters
|
//must be vector, as in Chain Lightning order matters
|
||||||
std::vector<const CStack*> attackedCres; //CStack vector is somewhat more suitable than ID vector
|
std::vector<const CStack*> attackedCres; //CStack vector is somewhat more suitable than ID vector
|
||||||
|
|
||||||
auto creatures = owner->getAffectedStacks(parameters.cb, parameters.mode, parameters.casterColor, parameters.spellLvl, destination, parameters.caster);
|
auto creatures = owner->getAffectedStacks(parameters.cb, parameters.mode, parameters.caster, parameters.spellLvl, destination);
|
||||||
std::copy(creatures.begin(), creatures.end(), std::back_inserter(attackedCres));
|
std::copy(creatures.begin(), creatures.end(), std::back_inserter(attackedCres));
|
||||||
|
|
||||||
logGlobal->debugStream() << "will affect: " << attackedCres.size() << " stacks";
|
logGlobal->debugStream() << "will affect: " << attackedCres.size() << " stacks";
|
||||||
|
@ -153,9 +153,9 @@ std::vector<BattleHex> CSpell::rangeInHexes(BattleHex centralHex, ui8 schoolLvl,
|
|||||||
return mechanics->rangeInHexes(centralHex,schoolLvl,side,outDroppedHexes);
|
return mechanics->rangeInHexes(centralHex,schoolLvl,side,outDroppedHexes);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set<const CStack *> CSpell::getAffectedStacks(const CBattleInfoCallback * cb, ECastingMode::ECastingMode mode, PlayerColor casterColor, int spellLvl, BattleHex destination, const ISpellCaster * caster) const
|
std::set<const CStack *> CSpell::getAffectedStacks(const CBattleInfoCallback * cb, ECastingMode::ECastingMode mode, const ISpellCaster * caster, int spellLvl, BattleHex destination) const
|
||||||
{
|
{
|
||||||
ISpellMechanics::SpellTargetingContext ctx(this, cb,mode,casterColor,spellLvl,destination);
|
ISpellMechanics::SpellTargetingContext ctx(this, cb, mode, caster, spellLvl, destination);
|
||||||
|
|
||||||
std::set<const CStack* > attackedCres = mechanics->getAffectedStacks(ctx);
|
std::set<const CStack* > attackedCres = mechanics->getAffectedStacks(ctx);
|
||||||
|
|
||||||
|
@ -218,7 +218,7 @@ public:
|
|||||||
ui32 calculateDamage(const ISpellCaster * caster, const CStack * affectedCreature, int spellSchoolLevel, int usedSpellPower) const;
|
ui32 calculateDamage(const ISpellCaster * caster, const CStack * affectedCreature, int spellSchoolLevel, int usedSpellPower) const;
|
||||||
|
|
||||||
///selects from allStacks actually affected stacks
|
///selects from allStacks actually affected stacks
|
||||||
std::set<const CStack *> getAffectedStacks(const CBattleInfoCallback * cb, ECastingMode::ECastingMode mode, PlayerColor casterColor, int spellLvl, BattleHex destination, const ISpellCaster * caster) const;
|
std::set<const CStack *> getAffectedStacks(const CBattleInfoCallback * cb, ECastingMode::ECastingMode mode, const ISpellCaster * caster, int spellLvl, BattleHex destination) const;
|
||||||
|
|
||||||
si32 getCost(const int skillLevel) const;
|
si32 getCost(const int skillLevel) const;
|
||||||
|
|
||||||
|
@ -91,11 +91,11 @@ public:
|
|||||||
CSpell::TargetInfo ti;
|
CSpell::TargetInfo ti;
|
||||||
ECastingMode::ECastingMode mode;
|
ECastingMode::ECastingMode mode;
|
||||||
BattleHex destination;
|
BattleHex destination;
|
||||||
PlayerColor casterColor;
|
const ISpellCaster * caster;
|
||||||
int schoolLvl;
|
int schoolLvl;
|
||||||
|
|
||||||
SpellTargetingContext(const CSpell * s, const CBattleInfoCallback * c, ECastingMode::ECastingMode m, PlayerColor cc, int lvl, BattleHex dest)
|
SpellTargetingContext(const CSpell * s, const CBattleInfoCallback * c, ECastingMode::ECastingMode m, const ISpellCaster * caster_, int lvl, BattleHex dest)
|
||||||
: cb(c), ti(s,lvl, m), mode(m), destination(dest), casterColor(cc), schoolLvl(lvl)
|
: cb(c), ti(s,lvl, m), mode(m), destination(dest), caster(caster_), schoolLvl(lvl)
|
||||||
{};
|
{};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -842,7 +842,7 @@ void CGameHandler::prepareAttack(BattleAttack &bat, const CStack *att, const CSt
|
|||||||
|
|
||||||
//TODO: should spell override creature`s projectile?
|
//TODO: should spell override creature`s projectile?
|
||||||
|
|
||||||
std::set<const CStack*> attackedCreatures = SpellID(bonus->subtype).toSpell()->getAffectedStacks(gs->curB, ECastingMode::SPELL_LIKE_ATTACK, att->owner, bonus->val, targetHex, att);
|
std::set<const CStack*> attackedCreatures = SpellID(bonus->subtype).toSpell()->getAffectedStacks(gs->curB, ECastingMode::SPELL_LIKE_ATTACK, att, bonus->val, targetHex);
|
||||||
|
|
||||||
//TODO: get exact attacked hex for defender
|
//TODO: get exact attacked hex for defender
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user