1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-26 22:57:00 +02:00

Use clearAffected flag

This commit is contained in:
AlexVinS 2014-11-13 15:00:45 +03:00
parent 9f983c67c0
commit 9e8b09d747
3 changed files with 11 additions and 7 deletions

View File

@ -1553,8 +1553,12 @@ void CBattleInterface::castThisSpell(int spellID)
const CSpell::TargetInfo ti = sp->getTargetInfo(castingHero->getSpellSchoolLevel(sp)); const CSpell::TargetInfo ti = sp->getTargetInfo(castingHero->getSpellSchoolLevel(sp));
if(ti.massive) if(ti.massive || ti.type == CSpell::NO_TARGET)
spellSelMode = NO_LOCATION; spellSelMode = NO_LOCATION;
else if(ti.type == CSpell::LOCATION && ti.clearAffected)
{
spellSelMode = FREE_LOCATION;
}
else if(ti.type == CSpell::CREATURE) else if(ti.type == CSpell::CREATURE)
{ {
if(ti.smart) if(ti.smart)
@ -1566,11 +1570,6 @@ void CBattleInterface::castThisSpell(int spellID)
{ {
spellSelMode = OBSTACLE; spellSelMode = OBSTACLE;
} }
//todo: move to JSON config
if(spellID == SpellID::FIRE_WALL || spellID == SpellID::FORCE_FIELD)
{
spellSelMode = FREE_LOCATION;
}
if (spellSelMode == NO_LOCATION) //user does not have to select location if (spellSelMode == NO_LOCATION) //user does not have to select location
{ {

View File

@ -503,7 +503,9 @@ void CSpell::TargetInfo::init(const CSpell * spell, const int level)
smart = levelInfo.smartTarget; smart = levelInfo.smartTarget;
massive = levelInfo.range == "X"; massive = levelInfo.range == "X";
onlyAlive = !spell->isRisingSpell(); onlyAlive = !spell->isRisingSpell();
alwaysHitDirectly = false; alwaysHitDirectly = false;
clearAffected = levelInfo.clearAffected;
clearTarget = levelInfo.clearTarget;
} }

View File

@ -139,6 +139,9 @@ public:
///no immunity on primary target (mostly spell-like attack) ///no immunity on primary target (mostly spell-like attack)
bool alwaysHitDirectly; bool alwaysHitDirectly;
bool clearTarget;
bool clearAffected;
TargetInfo(const CSpell * spell, const int level); TargetInfo(const CSpell * spell, const int level);
TargetInfo(const CSpell * spell, const int level, ECastingMode::ECastingMode mode); TargetInfo(const CSpell * spell, const int level, ECastingMode::ECastingMode mode);