Browse Source

Remove some deprecated fields from CSpell
* now only new SpellScholl API is used
(!) untested

AlexVinS 11 years ago
parent
commit
a3f2667376

+ 1 - 1
client/battle/CBattleInterface.cpp

@@ -1502,7 +1502,7 @@ void CBattleInterface::battleStacksEffectsSet(const SetStackEffect & sse)
 	}
 }
 
-void CBattleInterface::castThisSpell(int spellID)
+void CBattleInterface::castThisSpell(SpellID spellID)
 {
 	auto  ba = new BattleAction;
 	ba->actionType = Battle::HERO_SPELL;

+ 1 - 1
client/battle/CBattleInterface.h

@@ -317,7 +317,7 @@ public:
 	void displayBattleFinished(); //displays battle result
 	void spellCast(const BattleSpellCast * sc); //called when a hero casts a spell
 	void battleStacksEffectsSet(const SetStackEffect & sse); //called when a specific effect is set to stacks
-	void castThisSpell(int spellID); //called when player has chosen a spell from spellbook
+	void castThisSpell(SpellID spellID); //called when player has chosen a spell from spellbook
 	void displayEffect(ui32 effect, int destTile, bool areaEffect = true); //displays custom effect on the battlefield
 	void displaySpellEffect(SpellID spellID, BattleHex destinationTile, bool areaEffect = true); //displays spell`s affected animation
 	void displaySpellHit(SpellID spellID, BattleHex destinationTile, bool areaEffect = true); //displays spell`s affected animation

+ 24 - 37
client/windows/CSpellWindow.cpp

@@ -107,15 +107,11 @@ CSpellWindow::CSpellWindow(const SDL_Rect &, const CGHeroInstance * _myHero, CPl
 		Uint8 *sitesPerOurTab = s.combatSpell ? sitesPerTabBattle : sitesPerTabAdv;
 
 		++sitesPerOurTab[4];
-
-		if(s.air)
-			++sitesPerOurTab[0];
-		if(s.fire)
-			++sitesPerOurTab[1];
-		if(s.water)
-			++sitesPerOurTab[2];
-		if(s.earth)
-			++sitesPerOurTab[3];
+		
+		s.forEachSchool([&sitesPerOurTab](const SpellSchoolInfo & school, bool & stop)
+		{
+			++sitesPerOurTab[(ui8)school.id];
+		});
 	}
 	if(sitesPerTabAdv[4] % 12 == 0)
 		sitesPerTabAdv[4]/=12;
@@ -382,23 +378,17 @@ public:
 		if(A.level<B.level)
 			return true;
 		if(A.level>B.level)
-			return false;
-		if(A.air && !B.air)
-			return true;
-		if(!A.air && B.air)
-			return false;
-		if(A.fire && !B.fire)
-			return true;
-		if(!A.fire && B.fire)
-			return false;
-		if(A.water && !B.water)
-			return true;
-		if(!A.water && B.water)
-			return false;
-		if(A.earth && !B.earth)
-			return true;
-		if(!A.earth && B.earth)
-			return false;
+			return false;		
+		
+		
+		for(ui8 schoolId = 0; schoolId < 4; schoolId++)
+		{
+			if(A.school.at((ESpellSchool)schoolId) && !B.school.at((ESpellSchool)schoolId))
+				return true;
+			if(!A.school.at((ESpellSchool)schoolId) && B.school.at((ESpellSchool)schoolId))
+				return false;
+		}
+		
 		return A.name < B.name;
 	}
 } spellsorter;
@@ -406,17 +396,15 @@ public:
 void CSpellWindow::computeSpellsPerArea()
 {
 	std::vector<SpellID> spellsCurSite;
-	for(auto it = mySpells.cbegin(); it != mySpells.cend(); ++it)
-	{
-		if(CGI->spellh->objects[*it]->combatSpell ^ !battleSpellsOnly
-			&& ((CGI->spellh->objects[*it]->air && selectedTab == 0) ||
-				(CGI->spellh->objects[*it]->fire && selectedTab == 1) ||
-				(CGI->spellh->objects[*it]->water && selectedTab == 2) ||
-				(CGI->spellh->objects[*it]->earth && selectedTab == 3) ||
-				selectedTab == 4 )
+	for(const SpellID & spellID : mySpells)
+	{
+		CSpell * s = spellID.toSpell(); 
+		
+		if(s->combatSpell ^ !battleSpellsOnly
+			&& ((selectedTab == 4) || (s->school[(ESpellSchool)selectedTab]))
 			)
 		{
-			spellsCurSite.push_back(*it);
+			spellsCurSite.push_back(spellID);
 		}
 	}
 	std::sort(spellsCurSite.begin(), spellsCurSite.end(), spellsorter);
@@ -653,9 +641,8 @@ void CSpellWindow::SpellArea::clickLeft(tribool down, bool previousState)
 			{
 			case ESpellCastProblem::OK:
 				{
-					int spell = mySpell;
 					owner->fexitb();
-					owner->myInt->battleInt->castThisSpell(spell);
+					owner->myInt->battleInt->castThisSpell(mySpell);
 				}
 				break;
 			case ESpellCastProblem::ANOTHER_ELEMENTAL_SUMMONED:

+ 0 - 6
lib/CSpellHandler.cpp

@@ -92,7 +92,6 @@ CSpell::LevelInfo::~LevelInfo()
 ///CSpell
 CSpell::CSpell():
 	id(SpellID::NONE), level(0),
-	earth(false), water(false), fire(false), air(false),
 	combatSpell(false), creatureAbility(false),
 	positiveness(ESpellPositiveness::NEUTRAL),
 	defaultProbability(0),
@@ -566,11 +565,6 @@ void CSpell::setIsRising(const bool val)
 void CSpell::setup()
 {
 	setupMechanics();
-	
-	air = school[ESpellSchool::AIR];
-	fire = school[ESpellSchool::FIRE];
-	water = school[ESpellSchool::WATER];
-	earth = school[ESpellSchool::EARTH];	
 }
 
 

+ 1 - 5
lib/CSpellHandler.h

@@ -208,11 +208,7 @@ public:
 	std::string name;
 
 	si32 level;
-	bool earth; //deprecated
-	bool water; //deprecated
-	bool fire;  //deprecated
-	bool air;   //deprecated
-	
+
 	std::map<ESpellSchool, bool> school; //todo: use this instead of separate boolean fields
 	
 	si32 power; //spell's power

+ 2 - 2
lib/GameConstants.h

@@ -895,6 +895,8 @@ public:
 	ESpellID num;
 };
 
+ID_LIKE_OPERATORS_DECLS(SpellID, SpellID::ESpellID)
+
 enum class ESpellSchool: ui8
 {
 	AIR 	= 0,
@@ -903,8 +905,6 @@ enum class ESpellSchool: ui8
 	EARTH 	= 3
 };
 
-ID_LIKE_OPERATORS_DECLS(SpellID, SpellID::ESpellID)
-
 // Typedef declarations
 typedef ui8 TFaction;
 typedef si64 TExpType;

+ 1 - 1
lib/SpellMechanics.cpp

@@ -162,7 +162,7 @@ protected:
 
 ///ADVENTURE SPELLS
 
-//todo: make configyrable
+//todo: make configurable
 class AdventureBonusingMechanics: public DefaultSpellMechanics 
 {
 public:	

+ 4 - 23
lib/rmg/CRmgTemplateZone.cpp

@@ -2173,9 +2173,9 @@ void CRmgTemplateZone::addAllPossibleObjects (CMapGenerator* gen)
 	}
 
 	//Pandora with 15 spells of certain school
-	for (int i = 1; i <= 4; i++)
+	for (int i = 0; i < 4; i++)
 	{
-		oi.generateObject = [i, gen]() -> CGObjectInstance *
+		oi.generateObject = [i,gen]() -> CGObjectInstance *
 		{
 			auto obj = new CGPandoraBox();
 			obj->ID = Obj::PANDORAS_BOX;
@@ -2184,27 +2184,8 @@ void CRmgTemplateZone::addAllPossibleObjects (CMapGenerator* gen)
 			std::vector <CSpell *> spells;
 			for (auto spell : VLC->spellh->objects)
 			{
-				if (!spell->isSpecialSpell())
-				{
-					bool school = false; //TODO: we could have better interface for iterating schools
-					switch (i)
-					{
-						case 1:
-							school = spell->air;
-							break;
-						case 2:
-							school = spell->earth;
-							break;
-						case 3:
-							school = spell->fire;
-							break;
-						case 4:
-							school = spell->water;
-							break;
-					}
-					if (school)
-						spells.push_back(spell);
-				}
+				if (!spell->isSpecialSpell() && spell->school[(ESpellSchool)i])
+					spells.push_back(spell);
 			}
 
 			RandomGeneratorUtil::randomShuffle(spells, gen->rand);