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

- Commanders will now be properly intialized

- Commanders show in the battle
This commit is contained in:
DjWarmonger 2012-04-28 11:41:20 +00:00
parent b0371597cd
commit 82f3bc8135
7 changed files with 40 additions and 8 deletions

View File

@ -1,5 +1,6 @@
{
"battle_positions": [
"battle_positions":
[
{
"name" : "attackerLoose", // loose formation, attacker
"levels": [
@ -77,5 +78,10 @@
[ 15, 185, 171, 1, 100, 86, 8 ]
]
}
]
],
"commanderPositions":
{
"field" : [88, 98], //attacker/defender
"creBank" : [95, 8] //not expecting defendig hero at bank, but hell knows
}
}

View File

@ -1616,7 +1616,9 @@ BattleInfo * BattleInfo::setupBattle( int3 tile, int terrain, int terType, const
}
//reading battleStartpos
//TODO: parse once to some structure
std::vector< std::vector<int> > attackerLoose, defenderLoose, attackerTight, defenderTight, attackerCreBank, defenderCreBank;
std::vector <int> commanderField, commanderBank;
const JsonNode config(GameConstants::DATA_DIR + "/config/battleStartpos.json");
const JsonVector &positions = config["battle_positions"].Vector();
@ -1627,6 +1629,15 @@ BattleInfo * BattleInfo::setupBattle( int3 tile, int terrain, int terType, const
CGH::readBattlePositions(positions[4]["levels"], attackerCreBank);
CGH::readBattlePositions(positions[5]["levels"], defenderCreBank);
BOOST_FOREACH (auto position, config["commanderPositions"]["field"].Vector())
{
commanderField.push_back (position.Float());
}
BOOST_FOREACH (auto position, config["commanderPositions"]["creBank"].Vector())
{
commanderBank.push_back (position.Float());
}
//battleStartpos read
int k = 0; //stack serial
for(TSlots::const_iterator i = armies[0]->Slots().begin(); i!=armies[0]->Slots().end(); i++, k++)
@ -1721,6 +1732,18 @@ BattleInfo * BattleInfo::setupBattle( int3 tile, int terrain, int terType, const
}
//war machines added
//adding commanders
for (int i = 0; i < 2; ++i)
{
if (heroes[i] && heroes[i]->commander)
{
CStack * stack = curB->generateNewStack (*heroes[i]->commander, !i, 255,
creatureBank ? commanderBank[i] : commanderField[i]);
stacks.push_back(stack);
}
}
if (curB->siege == 2 || curB->siege == 3)
{
// keep tower

View File

@ -36,7 +36,7 @@ namespace ArtBearer
{
enum
{
HERO, CREATURE//, COMMANDER
HERO, CREATURE, COMMANDER
};
}

View File

@ -949,20 +949,21 @@ ui8 CStackInstance::bearerType() const
CCommanderInstance::CCommanderInstance()
{
init();
name = "Unnamed";
}
CCommanderInstance::CCommanderInstance (TCreature id)
{
init();
CStackInstance (id, 1); //init with single unit
setType(id);
name = "Commando"; //TODO - parse them
}
void CCommanderInstance::init()
void CCommanderInstance::init() //called only after CStackInstance::init was executed
{
alive = true;
experience = 0;
count = 0;
count = 1;
type = NULL;
idRand = -1;
_armyObj = NULL;

View File

@ -83,13 +83,14 @@ public:
std::string name; // each Commander has different name
std::vector <std::pair <ui8, ui8> > secondarySkills; //ID, level
//std::vector <CArtifactInstance *> arts;
void init();
void init() OVERRIDE;
CCommanderInstance();
CCommanderInstance (TCreature id);
~CCommanderInstance();
ui64 getPower() const {return 0;};
int getExpRank() const {return 0;};
ui8 bearerType() const OVERRIDE {return ArtBearer::COMMANDER;}; //from CArtifactSet
template <typename Handler> void serialize(Handler &h, const int version)
{

View File

@ -777,6 +777,7 @@ void CGHeroInstance::initHero()
if (GameConstants::COMMANDERS)
{
commander = new CCommanderInstance (VLC->creh->factionCommanders[type->heroType / 2]); //hopefully it returns town type
commander->setArmyObj (castToArmyObj()); //TODO: separate function for setting commanders
}
hoverName = VLC->generaltexth->allTexts[15];

View File

@ -92,7 +92,7 @@ namespace GameConstants
//game modules
const bool STACK_EXP = true;
const bool STACK_ARTIFACT = true; //now toggle for testing
const bool COMMANDERS = false;
const bool COMMANDERS = true;
const bool MITHRIL = false;
}