1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-29 23:07:48 +02:00

NKAI: fix patrolling heroes never retreat and town danger evaluation

This commit is contained in:
Andrii Danylchenko
2024-04-21 14:23:58 +03:00
parent 7aff0e63fc
commit 390136e536
3 changed files with 26 additions and 3 deletions

View File

@@ -53,15 +53,26 @@ ui64 FuzzyHelper::evaluateDanger(const int3 & tile, const CGHeroInstance * visit
// in some scenarios hero happens to be "under" the object (eg town). Then we consider ONLY the hero.
if(vstd::contains_if(visitableObjects, objWithID<Obj::HERO>))
{
vstd::erase_if(visitableObjects, [](const CGObjectInstance * obj)
vstd::erase_if(visitableObjects, [](const CGObjectInstance * obj) -> bool
{
return !objWithID<Obj::HERO>(obj);
return !objWithID<Obj::HERO>(obj);
});
}
if(const CGObjectInstance * dangerousObject = vstd::backOrNull(visitableObjects))
{
objectDanger = evaluateDanger(dangerousObject); //unguarded objects can also be dangerous or unhandled
if(objWithID<Obj::HERO>(dangerousObject))
{
auto hero = dynamic_cast<const CGHeroInstance *>(dangerousObject);
if(hero->visitedTown && !hero->visitedTown->garrisonHero)
{
objectDanger += evaluateDanger(hero->visitedTown.get());
}
}
if(objectDanger)
{
//TODO: don't downcast objects AI shouldn't know about!