1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00
This commit is contained in:
Michał W. Urbańczyk 2013-09-05 22:11:13 +00:00
parent 8515bd037d
commit dd72261193
3 changed files with 37 additions and 4 deletions

View File

@ -3233,10 +3233,15 @@ TSubgoal CGoal::whatToDoToAchieve()
auto creature = VLC->creh->creatures[objid];
if (t->subID == creature->faction) //TODO: how to force AI to build unupgraded creatures? :O
{
auto creatures = t->town->creatures[creature->level];
int upgradeNumber = std::find(creatures.begin(), creatures.end(), creature->idNumber) - creatures.begin();
auto creatures = vstd::tryAt(t->town->creatures, creature->level - 1);
if(!creatures)
continue;
BuildingID bid(BuildingID::DWELL_FIRST + creature->level + upgradeNumber * GameConstants::CREATURES_PER_TOWN);
int upgradeNumber = vstd::find_pos(*creatures, creature->idNumber);
if(upgradeNumber < 0)
continue;
BuildingID bid(BuildingID::DWELL_FIRST + creature->level - 1 + upgradeNumber * GameConstants::CREATURES_PER_TOWN);
if (t->hasBuilt(bid)) //this assumes only creatures with dwellings are assigned to faction
{
dwellings.push_back(t);

View File

@ -601,6 +601,34 @@ namespace vstd
return nullptr;
}
template <typename Container, typename Index>
bool isValidIndex(const Container &c, Index i)
{
return i >= 0 && i < c.size();
}
template <typename Container, typename Index>
boost::optional<typename Container::const_reference> tryAt(const Container &c, Index i)
{
if(isValidIndex(c, i))
{
auto itr = c.begin();
std::advance(itr, i);
return *itr;
}
return boost::none;
}
template <typename Container, typename Pred>
static boost::optional<typename Container::const_reference> tryFindIf(const Container &r, const Pred &t)
{
auto pos = range::find_if(r, t);
if(pos == boost::end(r))
return boost::none;
else
return *pos;
}
using boost::math::round;
}
using vstd::operator-=;

View File

@ -33,7 +33,7 @@ public:
CreatureID idNumber;
TFaction faction;
ui8 level; // 0 - unknown
ui8 level; // 0 - unknown; 1-7 for "usual" creatures
//stats that are not handled by bonus system
ui32 fightValue, AIValue, growth, hordeGrowth;