本文整理汇总了C++中TGoalVec::empty方法的典型用法代码示例。如果您正苦于以下问题:C++ TGoalVec::empty方法的具体用法?C++ TGoalVec::empty怎么用?C++ TGoalVec::empty使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TGoalVec
的用法示例。
在下文中一共展示了TGoalVec::empty方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getAllPossibleSubgoals
TGoalVec VisitTile::getAllPossibleSubgoals()
{
assert(cb->isInTheMap(tile));
TGoalVec ret;
if (!cb->isVisible(tile))
ret.push_back (sptr(Goals::Explore())); //what sense does it make?
else
{
std::vector<const CGHeroInstance *> heroes;
if (hero)
heroes.push_back(hero.h); //use assigned hero if any
else
heroes = cb->getHeroesInfo(); //use most convenient hero
for (auto h : heroes)
{
if (ai->isAccessibleForHero(tile, h))
ret.push_back (sptr(Goals::VisitTile(tile).sethero(h)));
}
if (ai->canRecruitAnyHero())
ret.push_back (sptr(Goals::RecruitHero()));
}
if (ret.empty())
{
auto obj = frontOrNull(cb->getVisitableObjs(tile));
if (obj && obj->ID == Obj::HERO && obj->tempOwner == ai->playerID) //our own hero stands on that tile
ret.push_back (sptr(Goals::VisitTile(tile).sethero(dynamic_cast<const CGHeroInstance *>(obj)).setisElementar(true)));
else
ret.push_back (sptr(Goals::ClearWayTo(tile)));
}
//important - at least one sub-goal must handle case which is impossible to fulfill (unreachable tile)
return ret;
}
示例2: getAllPossibleSubgoals
TGoalVec ClearWayTo::getAllPossibleSubgoals()
{
TGoalVec ret;
for (auto h : cb->getHeroesInfo())
{
if ((hero && hero->visitablePos() == tile && hero == *h) || //we can't free the way ourselves
h->visitablePos() == tile) //we are already on that tile! what does it mean?
continue;
SectorMap sm(h);
int3 tileToHit = sm.firstTileToGet(hero ? hero : h, tile);
//if our hero is trapped, make sure we request clearing the way from OUR perspective
if (!tileToHit.valid())
continue;
if (isBlockedBorderGate(tileToHit))
{ //FIXME: this way we'll not visit gate and activate quest :?
ret.push_back (sptr (Goals::FindObj (Obj::KEYMASTER, cb->getTile(tileToHit)->visitableObjects.back()->subID)));
}
auto topObj = cb->getTopObj(tileToHit);
if(topObj)
{
if (topObj->ID == Obj::HERO && cb->getPlayerRelations(h->tempOwner, topObj->tempOwner) != PlayerRelations::ENEMIES)
if (topObj != hero.get(true)) //the hero we wnat to free
logAi->errorStream() << boost::format("%s stands in the way of %s") % topObj->getHoverText() % h->getHoverText();
if (topObj->ID == Obj::QUEST_GUARD || topObj->ID == Obj::BORDERGUARD)
{
if (shouldVisit(h, topObj))
{
//do NOT use VISIT_TILE, as tile with quets guard can't be visited
ret.push_back (sptr (Goals::GetObj(topObj->id.getNum()).sethero(h)));
}
else
{
//TODO: we should be able to return apriopriate quest here (VCAI::striveToQuest)
logAi->debugStream() << "Quest guard blocks the way to " + tile();
}
}
}
else
ret.push_back (sptr (Goals::VisitTile(tileToHit).sethero(h)));
}
if (ai->canRecruitAnyHero())
ret.push_back (sptr (Goals::RecruitHero()));
if (ret.empty())
{
logAi->warnStream() << "There is no known way to clear the way to tile " + tile();
throw goalFulfilledException (sptr(*this)); //make sure asigned hero gets unlocked
}
return ret;
}
示例3: missionKeymaster
TGoalVec CompleteQuest::missionKeymaster() const
{
TGoalVec solutions = tryCompleteQuest();
if(solutions.empty())
{
solutions.push_back(sptr(Goals::FindObj(Obj::KEYMASTER, q.obj->subID)));
}
return solutions;
}
示例4: missionLevel
TGoalVec CompleteQuest::missionLevel() const
{
TGoalVec solutions = tryCompleteQuest();
if(solutions.empty())
{
logAi->debug("Don't know how to reach hero level %d", q.quest->m13489val);
}
return solutions;
}
示例5: missionHero
TGoalVec CompleteQuest::missionHero() const
{
TGoalVec solutions = tryCompleteQuest();
if(solutions.empty())
{
//rule of a thumb - quest heroes usually are locked in prisons
solutions.push_back(sptr(FindObj(Obj::PRISON)));
}
return solutions;
}
示例6: getAllPossibleSubgoals
TGoalVec Build::getAllPossibleSubgoals()
{
TGoalVec ret;
for(const CGTownInstance * t : cb->getTownsInfo())
{
//start fresh with every town
ai->ah->getBuildingOptions(t);
auto immediateBuilding = ai->ah->immediateBuilding();
auto expensiveBuilding = ai->ah->expensiveBuilding();
//handling for early town development to save money and focus on income
if(!t->hasBuilt(ai->ah->getMaxPossibleGoldBuilding(t)) && expensiveBuilding.is_initialized())
{
auto potentialBuilding = expensiveBuilding.get();
switch(expensiveBuilding.get().bid)
{
case BuildingID::TOWN_HALL:
case BuildingID::CITY_HALL:
case BuildingID::CAPITOL:
case BuildingID::FORT:
case BuildingID::CITADEL:
case BuildingID::CASTLE:
//If above buildings are next to be bought, but no money... do not buy anything else, try to gather resources for these. Simple but has to suffice for now.
auto goal = ai->ah->whatToDo(potentialBuilding.price, sptr(BuildThis(potentialBuilding.bid, t).setpriority(2.25)));
ret.push_back(goal);
return ret;
break;
}
}
if(immediateBuilding.is_initialized())
{
ret.push_back(sptr(BuildThis(immediateBuilding.get().bid, t).setpriority(2))); //prioritize buildings we can build quick
}
else //try build later
{
if(expensiveBuilding.is_initialized())
{
auto potentialBuilding = expensiveBuilding.get(); //gather resources for any we can't afford
auto goal = ai->ah->whatToDo(potentialBuilding.price, sptr(BuildThis(potentialBuilding.bid, t).setpriority(0.5)));
ret.push_back(goal);
}
}
}
if(ret.empty())
throw cannotFulfillGoalException("BUILD has been realized as much as possible.");
else
return ret;
}
示例7: missionArt
TGoalVec CompleteQuest::missionArt() const
{
TGoalVec solutions = tryCompleteQuest();
if(!solutions.empty())
return solutions;
for(auto art : q.quest->m5arts)
{
solutions.push_back(sptr(GetArtOfType(art))); //TODO: transport?
}
return solutions;
}
示例8: missionArmy
TGoalVec CompleteQuest::missionArmy() const
{
TGoalVec solutions = tryCompleteQuest();
if(!solutions.empty())
return solutions;
for(auto creature : q.quest->m6creatures)
{
solutions.push_back(sptr(GatherTroops(creature.type->idNumber, creature.count)));
}
return solutions;
}
示例9: missionIncreasePrimaryStat
TGoalVec CompleteQuest::missionIncreasePrimaryStat() const
{
TGoalVec solutions = tryCompleteQuest();
if(solutions.empty())
{
for(int i = 0; i < q.quest->m2stats.size(); ++i)
{
// TODO: library, school and other boost objects
logAi->debug("Don't know how to increase primary stat %d", i);
}
}
return solutions;
}
示例10: whatToDoToAchieve
TSubgoal CompleteQuest::whatToDoToAchieve()
{
if(q.quest->missionType == CQuest::MISSION_NONE)
{
throw cannotFulfillGoalException("Can not complete inactive quest");
}
TGoalVec solutions = getAllPossibleSubgoals();
if(solutions.empty())
throw cannotFulfillGoalException("Can not complete quest " + questToString());
TSubgoal result = fh->chooseSolution(solutions);
logAi->trace(
"Returning %s, tile: %s, objid: %d, hero: %s",
result->name(),
result->tile.toString(),
result->objid,
result->hero.validAndSet() ? result->hero->name : "not specified");
return result;
}
示例11: getAllPossibleSubgoals
//.........这里部分代码省略.........
{
if(h == heroDummy.h)
return true;
else if(!ai->isAccessibleForHero(heroDummy->visitablePos(), h, true))
return true;
else if(!ai->canGetArmy(heroDummy.h, h)) //TODO: return actual aiValue
return true;
else if(ai->getGoal(h)->goalType == GATHER_ARMY)
return true;
else
return false;
});
for(auto h : otherHeroes)
{
// Go to the other hero if we are faster
if(!vstd::contains(ai->visitedHeroes[hero], h))
{
vstd::concatenate(ret, ai->ah->howToVisitObj(hero, h));
}
// Go to the other hero if we are faster
if(!vstd::contains(ai->visitedHeroes[h], hero))
{
vstd::concatenate(ret, ai->ah->howToVisitObj(h, hero.get()));
}
}
std::vector<const CGObjectInstance *> objs;
for(auto obj : ai->visitableObjs)
{
if(obj->ID == Obj::CREATURE_GENERATOR1)
{
auto relationToOwner = cb->getPlayerRelations(obj->getOwner(), ai->playerID);
//Use flagged dwellings only when there are available creatures that we can afford
if(relationToOwner == PlayerRelations::SAME_PLAYER)
{
auto dwelling = dynamic_cast<const CGDwelling *>(obj);
ui32 val = std::min<ui32>(value, howManyReinforcementsCanBuy(hero.get(), dwelling));
if(val)
{
for(auto & creLevel : dwelling->creatures)
{
if(creLevel.first)
{
for(auto & creatureID : creLevel.second)
{
auto creature = VLC->creh->creatures[creatureID];
if(ai->ah->freeResources().canAfford(creature->cost))
objs.push_back(obj); //TODO: reserve resources?
}
}
}
}
}
}
}
for(auto h : cb->getHeroesInfo())
{
for(auto obj : objs)
{
//find safe dwelling
if(ai->isGoodForVisit(obj, h))
{
vstd::concatenate(ret, ai->ah->howToVisitObj(h, obj));
}
}
}
if(ai->canRecruitAnyHero() && ai->ah->freeGold() > GameConstants::HERO_GOLD_COST) //this is not stupid in early phase of game
{
if(auto t = ai->findTownWithTavern())
{
for(auto h : cb->getAvailableHeroes(t)) //we assume that all towns have same set of heroes
{
if(h && h->getTotalStrength() > 500) //do not buy heroes with single creatures for GatherArmy
{
ret.push_back(sptr(RecruitHero()));
break;
}
}
}
}
if(ret.empty())
{
const bool allowGatherArmy = false;
if(hero == ai->primaryHero())
ret.push_back(sptr(Explore(allowGatherArmy)));
else
throw cannotFulfillGoalException("No ways to gather army");
}
return ret;
}