mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Merge pull request #553 from nullkiller/ai-fix-town-portal-to-occupied-town
ai fix town portal to occupied town
This commit is contained in:
		| @@ -152,8 +152,3 @@ void AIhelper::updatePaths(std::vector<HeroPtr> heroes) | ||||
| { | ||||
| 	pathfindingManager->updatePaths(heroes); | ||||
| } | ||||
|  | ||||
| void AIhelper::updatePaths(const HeroPtr & hero) | ||||
| { | ||||
| 	pathfindingManager->updatePaths(hero); | ||||
| } | ||||
|   | ||||
| @@ -61,7 +61,6 @@ public: | ||||
| 	Goals::TGoalVec howToVisitObj(ObjectIdRef obj) const override; | ||||
| 	std::vector<AIPath> getPathsToTile(const HeroPtr & hero, const int3 & tile) const override; | ||||
| 	void updatePaths(std::vector<HeroPtr> heroes) override; | ||||
| 	void updatePaths(const HeroPtr & hero) override; | ||||
|  | ||||
| 	STRONG_INLINE | ||||
| 	bool isTileAccessible(const HeroPtr & hero, const int3 & tile) const | ||||
|   | ||||
| @@ -103,36 +103,6 @@ void AIPathfinder::updatePaths(std::vector<HeroPtr> heroes) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void AIPathfinder::updatePaths(const HeroPtr & hero) | ||||
| { | ||||
| 	std::shared_ptr<AINodeStorage> nodeStorage; | ||||
|  | ||||
| 	if(!vstd::contains(storageMap, hero)) | ||||
| 	{ | ||||
| 		if(storageMap.size() < storagePool.size()) | ||||
| 		{ | ||||
| 			nodeStorage = storagePool.at(storageMap.size()); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			nodeStorage = std::make_shared<AINodeStorage>(cb->getMapSize()); | ||||
| 			storagePool.push_back(nodeStorage); | ||||
| 		} | ||||
|  | ||||
| 		storageMap[hero] = nodeStorage; | ||||
| 		nodeStorage->setHero(hero, ai); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		nodeStorage = storageMap.at(hero); | ||||
| 	} | ||||
|  | ||||
| 	logAi->debug("Recalculate paths for %s", hero->name); | ||||
| 	auto config = std::make_shared<AIPathfinding::AIPathfinderConfig>(cb, ai, nodeStorage); | ||||
|  | ||||
| 	cb->calculatePaths(config, hero.get()); | ||||
| } | ||||
|  | ||||
| std::shared_ptr<const AINodeStorage> AIPathfinder::getStorage(const HeroPtr & hero) const | ||||
| { | ||||
| 	return storageMap.at(hero); | ||||
|   | ||||
| @@ -28,6 +28,5 @@ public: | ||||
| 	std::vector<AIPath> getPathInfo(const HeroPtr & hero, const int3 & tile) const; | ||||
| 	bool isTileAccessible(const HeroPtr & hero, const int3 & tile) const; | ||||
| 	void updatePaths(std::vector<HeroPtr> heroes); | ||||
| 	void updatePaths(const HeroPtr & heroes); | ||||
| 	void init(); | ||||
| }; | ||||
|   | ||||
| @@ -240,8 +240,3 @@ void PathfindingManager::updatePaths(std::vector<HeroPtr> heroes) | ||||
| 	logAi->debug("AIPathfinder has been reseted."); | ||||
| 	pathfinder->updatePaths(heroes); | ||||
| } | ||||
|  | ||||
| void PathfindingManager::updatePaths(const HeroPtr & hero) | ||||
| { | ||||
| 	pathfinder->updatePaths(hero); | ||||
| } | ||||
|   | ||||
| @@ -21,7 +21,6 @@ public: | ||||
| 	virtual void setAI(VCAI * AI) = 0; | ||||
|  | ||||
| 	virtual void updatePaths(std::vector<HeroPtr> heroes) = 0; | ||||
| 	virtual void updatePaths(const HeroPtr & hero) = 0; | ||||
| 	virtual Goals::TGoalVec howToVisitTile(const HeroPtr & hero, const int3 & tile, bool allowGatherArmy = true) const = 0; | ||||
| 	virtual Goals::TGoalVec howToVisitObj(const HeroPtr & hero, ObjectIdRef obj, bool allowGatherArmy = true) const = 0; | ||||
| 	virtual Goals::TGoalVec howToVisitTile(const int3 & tile) const = 0; | ||||
| @@ -48,7 +47,6 @@ public: | ||||
| 	Goals::TGoalVec howToVisitObj(ObjectIdRef obj) const override; | ||||
| 	std::vector<AIPath> getPathsToTile(const HeroPtr & hero, const int3 & tile) const override; | ||||
| 	void updatePaths(std::vector<HeroPtr> heroes) override; | ||||
| 	void updatePaths(const HeroPtr & hero) override; | ||||
|  | ||||
| 	STRONG_INLINE | ||||
| 	bool isTileAccessible(const HeroPtr & hero, const int3 & tile) const | ||||
|   | ||||
| @@ -1422,14 +1422,14 @@ void VCAI::wander(HeroPtr h) | ||||
| 	while(h->movement) | ||||
| 	{ | ||||
| 		validateVisitableObjs(); | ||||
| 		ah->updatePaths(h); | ||||
| 		ah->updatePaths(getMyHeroes()); | ||||
|  | ||||
| 		std::vector<ObjectIdRef> dests; | ||||
|  | ||||
| 		//also visit our reserved objects - but they are not prioritized to avoid running back and forth | ||||
| 		vstd::copy_if(reservedHeroesMap[h], std::back_inserter(dests), [&](ObjectIdRef obj) -> bool | ||||
| 		{ | ||||
| 			return ah->getPathsToTile(h, obj->visitablePos()).size(); | ||||
| 			return ah->isTileAccessible(h, obj->visitablePos()); | ||||
| 		}); | ||||
|  | ||||
| 		int pass = 0; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user