| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | 
							- /*
 
- * ObjectGraphCalculator.h, part of VCMI engine
 
- *
 
- * Authors: listed in file AUTHORS in main folder
 
- *
 
- * License: GNU General Public License v2.0 or later
 
- * Full text of license available in license.txt file, in main folder
 
- *
 
- */
 
- #pragma once
 
- #include "ObjectGraph.h"
 
- #include "../AIUtility.h"
 
- namespace NKAI
 
- {
 
- struct ConnectionCostInfo
 
- {
 
- 	float totalCost = 0;
 
- 	float avg = 0;
 
- 	int connectionsCount = 0;
 
- };
 
- class ObjectGraphCalculator
 
- {
 
- private:
 
- 	ObjectGraph * target;
 
- 	const Nullkiller * ai;
 
- 	std::mutex syncLock;
 
- 	std::map<const CGHeroInstance *, HeroRole> actors;
 
- 	std::map<const CGHeroInstance *, const CGObjectInstance *> actorObjectMap;
 
- 	std::vector<std::unique_ptr<CGBoat>> temporaryBoats;
 
- 	std::vector<std::unique_ptr<CGHeroInstance>> temporaryActorHeroes;
 
- public:
 
- 	ObjectGraphCalculator(ObjectGraph * target, const Nullkiller * ai);
 
- 	void setGraphObjects();
 
- 	void calculateConnections();
 
- 	float getNeighborConnectionsCost(const int3 & pos, std::vector<AIPath> & pathCache);
 
- 	void addMinimalDistanceJunctions();
 
- private:
 
- 	void updatePaths();
 
- 	void calculateConnections(const int3 & pos, std::vector<AIPath> & pathCache);
 
- 	bool isExtraConnection(float direct, float side1, float side2) const;
 
- 	void removeExtraConnections();
 
- 	void addObjectActor(const CGObjectInstance * obj);
 
- 	void addJunctionActor(const int3 & visitablePos, bool isVirtualBoat = false);
 
- 	ConnectionCostInfo getConnectionsCost(std::vector<AIPath> & paths) const;
 
- };
 
- }
 
 
  |