1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-17 20:58:07 +02:00

Improve dwelling value evaluation

This commit is contained in:
Dydzio 2018-08-16 21:17:45 +02:00
parent a7c2d03c87
commit e197d22e68
3 changed files with 23 additions and 20 deletions

View File

@ -375,7 +375,7 @@ float VisitObjEngine::evaluate(Goals::VisitObj & goal)
auto obj = ai->myCb->getObj(ObjectInstanceID(goal.objid));
boost::optional<int> objValueKnownByAI = MapObjectsEvaluator::getInstance().getObjectValue(obj->ID, obj->subID);
boost::optional<int> objValueKnownByAI = MapObjectsEvaluator::getInstance().getObjectValue(obj);
int objValue = 0;
if(objValueKnownByAI != boost::none) //consider adding value manipulation based on object instances on map

View File

@ -34,25 +34,7 @@ MapObjectsEvaluator::MapObjectsEvaluator()
}
else //some default handling when aiValue not found
{
if(primaryID == Obj::CREATURE_GENERATOR1 || primaryID == Obj::CREATURE_GENERATOR4)
{
int aiValue = 0;
CGDwelling dwellingMock;
CRandomGenerator rngMock;
handler->configureObject(&dwellingMock, rngMock);
for(auto & creLevel : dwellingMock.creatures)
{
for(auto & creatureID : creLevel.second)
{
auto creature = VLC->creh->creatures[creatureID];
aiValue += (creature->AIValue * creature->growth);
}
}
objectDatabase[CompoundMapObjectID(primaryID, secondaryID)] = aiValue;
}
else
objectDatabase[CompoundMapObjectID(primaryID, secondaryID)] = 0;
objectDatabase[CompoundMapObjectID(primaryID, secondaryID)] = 0;
}
}
}
@ -70,6 +52,26 @@ boost::optional<int> MapObjectsEvaluator::getObjectValue(int primaryID, int seco
return boost::optional<int>();
}
boost::optional<int> MapObjectsEvaluator::getObjectValue(const CGObjectInstance * obj) const
{
if(obj->ID == Obj::CREATURE_GENERATOR1 || obj->ID == Obj::CREATURE_GENERATOR4)
{
auto dwelling = dynamic_cast<const CGDwelling *>(obj);
int aiValue = 0;
for(auto & creLevel : dwelling->creatures)
{
for(auto & creatureID : creLevel.second)
{
auto creature = VLC->creh->creatures[creatureID];
aiValue += (creature->AIValue * creature->growth);
}
}
return aiValue;
}
else
return getObjectValue(obj->ID, obj->subID);
}
void MapObjectsEvaluator::addObjectData(int primaryID, int secondaryID, int value) //by current design it updates value if already in AI database
{
CompoundMapObjectID internalIdentifier = CompoundMapObjectID(primaryID, secondaryID);

View File

@ -19,6 +19,7 @@ public:
MapObjectsEvaluator();
static MapObjectsEvaluator & getInstance();
boost::optional<int> getObjectValue(int primaryID, int secondaryID) const;
boost::optional<int> getObjectValue(const CGObjectInstance * obj) const;
void addObjectData(int primaryID, int secondaryID, int value);
void removeObjectData(int primaryID, int secondaryID);
};