1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-05-13 22:06:58 +02:00

- fix uninitialized cursor

- stubs for loading heroes and classes from mods (no real code yet)
- heroes loading uses string IDs for secondary skills, some cleanup in HeroHandler
This commit is contained in:
Ivan Savenko 2012-12-15 08:47:02 +00:00
parent 423a226e31
commit d2ee602b29
8 changed files with 1462 additions and 1413 deletions

View File

@ -23,6 +23,7 @@ void CCursorHandler::initCursor()
xpos = ypos = 0; xpos = ypos = 0;
type = ECursor::DEFAULT; type = ECursor::DEFAULT;
dndObject = nullptr; dndObject = nullptr;
currentCursor = nullptr;
help = CSDL_Ext::newSurface(40,40); help = CSDL_Ext::newSurface(40,40);
SDL_ShowCursor(SDL_DISABLE); SDL_ShowCursor(SDL_DISABLE);

File diff suppressed because it is too large Load Diff

View File

@ -8,6 +8,7 @@
#include "StringConstants.h" #include "StringConstants.h"
#include "BattleHex.h" #include "BattleHex.h"
#include "CModHandler.h" #include "CModHandler.h"
#include "CTownHandler.h"
/* /*
* CHeroHandler.cpp, part of VCMI engine * CHeroHandler.cpp, part of VCMI engine
@ -125,7 +126,7 @@ void CHeroClassHandler::load(const JsonNode & classes)
//TODO //TODO
} }
void CHeroClassHandler::loadClass(const JsonNode & heroClass) CHeroClass *CHeroClassHandler::loadClass(const JsonNode & heroClass)
{ {
//TODO //TODO
} }
@ -147,11 +148,49 @@ CHeroHandler::~CHeroHandler()
CHeroHandler::CHeroHandler() CHeroHandler::CHeroHandler()
{} {}
void CHeroHandler::load(const JsonNode & heroes)
{
//TODO
}
CHero * CHeroHandler::loadHero(const JsonNode & hero)
{
//TODO
}
void CHeroHandler::load() void CHeroHandler::load()
{ {
classes.load(); classes.load();
loadHeroes(); loadHeroes();
loadObstacles(); loadObstacles();
loadTerrains();
loadBallistics();
loadExperience();
}
void CHeroHandler::loadExperience()
{
expPerLevel.push_back(0);
expPerLevel.push_back(1000);
expPerLevel.push_back(2000);
expPerLevel.push_back(3200);
expPerLevel.push_back(4600);
expPerLevel.push_back(6200);
expPerLevel.push_back(8000);
expPerLevel.push_back(10000);
expPerLevel.push_back(12200);
expPerLevel.push_back(14700);
expPerLevel.push_back(17500);
expPerLevel.push_back(20600);
expPerLevel.push_back(24320);
expPerLevel.push_back(28784);
expPerLevel.push_back(34140);
while (expPerLevel[expPerLevel.size() - 1] > expPerLevel[expPerLevel.size() - 2])
{
int i = expPerLevel.size() - 1;
expPerLevel.push_back (expPerLevel[i] + (expPerLevel[i] - expPerLevel[i-1]) * 1.2);
}
expPerLevel.pop_back();//last value is broken
} }
void CHeroHandler::loadObstacles() void CHeroHandler::loadObstacles()
@ -220,8 +259,11 @@ void CHeroHandler::loadHeroes()
// sex: 0=male, 1=female // sex: 0=male, 1=female
currentHero->sex = !!hero["female"].Bool(); currentHero->sex = !!hero["female"].Bool();
BOOST_FOREACH(const JsonNode &set, hero["skill_set"].Vector()) { BOOST_FOREACH(const JsonNode &set, hero["skill_set"].Vector())
currentHero->secSkillsInit.push_back(std::make_pair(set["skill"].Float(), set["level"].Float())); {
int skillID = boost::range::find(SecondarySkill::names, set["skill"].String()) - boost::begin(SecondarySkill::names);
int skillLevel = boost::range::find(SecondarySkill::levels, set["level"].String()) - boost::begin(SecondarySkill::levels);
currentHero->secSkillsInit.push_back(std::make_pair(skillID, skillLevel));
} }
value = &hero["spell"]; value = &hero["spell"];
@ -247,30 +289,10 @@ void CHeroHandler::loadHeroes()
currentHero->heroClass = classes.heroClasses[classID]; currentHero->heroClass = classes.heroClasses[classID];
}); });
} }
}
loadTerrains(); void CHeroHandler::loadBallistics()
expPerLevel.push_back(0); {
expPerLevel.push_back(1000);
expPerLevel.push_back(2000);
expPerLevel.push_back(3200);
expPerLevel.push_back(4600);
expPerLevel.push_back(6200);
expPerLevel.push_back(8000);
expPerLevel.push_back(10000);
expPerLevel.push_back(12200);
expPerLevel.push_back(14700);
expPerLevel.push_back(17500);
expPerLevel.push_back(20600);
expPerLevel.push_back(24320);
expPerLevel.push_back(28784);
expPerLevel.push_back(34140);
while (expPerLevel[expPerLevel.size() - 1] > expPerLevel[expPerLevel.size() - 2])
{
int i = expPerLevel.size() - 1;
expPerLevel.push_back (expPerLevel[i] + (expPerLevel[i] - expPerLevel[i-1]) * 1.2);
}
expPerLevel.pop_back();//last value is broken
CLegacyConfigParser ballParser("DATA/BALLIST.TXT"); CLegacyConfigParser ballParser("DATA/BALLIST.TXT");
ballParser.endLine(); //header ballParser.endLine(); //header

View File

@ -56,7 +56,6 @@ public:
std::vector<SSpecialtyInfo> spec; std::vector<SSpecialtyInfo> spec;
si32 startingSpell; //-1 if none si32 startingSpell; //-1 if none
ui8 sex; // default sex: 0=male, 1=female ui8 sex; // default sex: 0=male, 1=female
//bool operator<(CHero& drugi){if (ID < drugi.ID) return true; else return false;}
CHero(); CHero();
~CHero(); ~CHero();
@ -131,7 +130,7 @@ public:
void load(const JsonNode & classes); void load(const JsonNode & classes);
/// load one class from json /// load one class from json
void loadClass(const JsonNode & heroClass); CHeroClass * loadClass(const JsonNode & heroClass);
~CHeroClassHandler(); ~CHeroClassHandler();
@ -148,9 +147,9 @@ class DLL_LINKAGE CHeroHandler
public: public:
CHeroClassHandler classes; CHeroClassHandler classes;
std::vector< ConstTransitivePtr<CHero> > heroes; //changed from nodrze std::vector< ConstTransitivePtr<CHero> > heroes;
//default costs of going through terrains: dirt, sand, grass, snow, swamp, rough, subterranean, lava, water, rock; -1 means terrain is imapassable //default costs of going through terrains. -1 means terrain is impassable
std::vector<int> terrCosts; std::vector<int> terrCosts;
struct SBallisticsLevelInfo struct SBallisticsLevelInfo
@ -169,14 +168,24 @@ public:
std::map<int, CObstacleInfo> obstacles; //info about obstacles that may be placed on battlefield std::map<int, CObstacleInfo> obstacles; //info about obstacles that may be placed on battlefield
std::map<int, CObstacleInfo> absoluteObstacles; //info about obstacles that may be placed on battlefield std::map<int, CObstacleInfo> absoluteObstacles; //info about obstacles that may be placed on battlefield
void loadObstacles(); //loads info about obstacles
ui32 level(ui64 experience) const; //calculates level corresponding to given experience amount ui32 level(ui64 experience) const; //calculates level corresponding to given experience amount
ui64 reqExp(ui32 level) const; //calculates experience required for given level ui64 reqExp(ui32 level) const; //calculates experience required for given level
/// Load multiple heroes from json
void load(const JsonNode & heroes);
/// Load single hero from json
CHero * loadHero(const JsonNode & hero);
/// Load everything (calls functions below + classes.load())
void load(); void load();
void loadHeroes(); void loadHeroes();
void loadExperience();
void loadBallistics();
void loadTerrains(); void loadTerrains();
void loadObstacles();
CHeroHandler(); //c-tor CHeroHandler(); //c-tor
~CHeroHandler(); //d-tor ~CHeroHandler(); //d-tor

View File

@ -5,6 +5,11 @@
#include "Filesystem/CResourceLoader.h" #include "Filesystem/CResourceLoader.h"
#include "Filesystem/ISimpleResourceLoader.h" #include "Filesystem/ISimpleResourceLoader.h"
#include "CCreatureHandler.h"
#include "CArtHandler.h"
#include "CTownHandler.h"
#include "CHeroHandler.h"
/* /*
* CModHandler.h, part of VCMI engine * CModHandler.h, part of VCMI engine
* *
@ -131,6 +136,12 @@ std::vector<std::string> CModHandler::getActiveMods()
return activeMods; return activeMods;
} }
template<typename Handler>
void handleData(Handler handler, const JsonNode & config)
{
handler->load(JsonUtils::assembleFromFiles(config.convertTo<std::vector<std::string> >()));
}
void CModHandler::loadActiveMods() void CModHandler::loadActiveMods()
{ {
BOOST_FOREACH(std::string & modName, activeMods) BOOST_FOREACH(std::string & modName, activeMods)
@ -139,9 +150,12 @@ void CModHandler::loadActiveMods()
const JsonNode config = JsonNode(ResourceID(modFileName)); const JsonNode config = JsonNode(ResourceID(modFileName));
VLC->townh->load(JsonUtils::assembleFromFiles(config ["factions"].convertTo<std::vector<std::string> >())); handleData(VLC->townh, config["factions"]);
VLC->creh->load( JsonUtils::assembleFromFiles(config["creatures"].convertTo<std::vector<std::string> >())); handleData(VLC->creh, config["creatures"]);
VLC->arth->load( JsonUtils::assembleFromFiles(config["artifacts"].convertTo<std::vector<std::string> >())); handleData(VLC->arth, config["artifacts"]);
handleData(&VLC->heroh->classes, config["heroClasses"]);
handleData(VLC->heroh, config["heroes"]);
} }
VLC->creh->buildBonusTreeForTiers(); //do that after all new creatures are loaded VLC->creh->buildBonusTreeForTiers(); //do that after all new creatures are loaded

View File

@ -3,9 +3,6 @@
#include "Filesystem/CResourceLoader.h" #include "Filesystem/CResourceLoader.h"
#include "VCMI_Lib.h" #include "VCMI_Lib.h"
#include "CCreatureHandler.h"
#include "CArtHandler.h"
#include "CTownHandler.h"
/* /*
* CModHandler.h, part of VCMI engine * CModHandler.h, part of VCMI engine

View File

@ -6,6 +6,7 @@
#include "JsonNode.h" #include "JsonNode.h"
#include "StringConstants.h" #include "StringConstants.h"
#include "CModHandler.h" #include "CModHandler.h"
#include "CArtHandler.h"
#include "Filesystem/CResourceLoader.h" #include "Filesystem/CResourceLoader.h"
/* /*

View File

@ -54,6 +54,11 @@ namespace SecondarySkill
"artillery", "learning", "offence", "armorer", "intelligence", // 25 "artillery", "learning", "offence", "armorer", "intelligence", // 25
"sorcery", "resistance", "firstAid" "sorcery", "resistance", "firstAid"
}; };
const std::string levels [4] =
{
"none", "basic", "advanced", "expert"
};
} }
namespace ETownType namespace ETownType