| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | 
							- /*
 
- * SectorMap.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 "AIUtility.h"
 
- enum
 
- {
 
- 	NOT_VISIBLE = 0,
 
- 	NOT_CHECKED = 1,
 
- 	NOT_AVAILABLE
 
- };
 
- struct SectorMap
 
- {
 
- 	//a sector is set of tiles that would be mutually reachable if all visitable objs would be passable (incl monsters)
 
- 	struct Sector
 
- 	{
 
- 		int id;
 
- 		std::vector<int3> tiles;
 
- 		std::vector<int3> embarkmentPoints; //tiles of other sectors onto which we can (dis)embark
 
- 		std::vector<const CGObjectInstance *> visitableObjs;
 
- 		bool water; //all tiles of sector are land or water
 
- 		Sector()
 
- 		{
 
- 			id = -1;
 
- 			water = false;
 
- 		}
 
- 	};
 
- 	typedef unsigned short TSectorID; //smaller than int to allow -1 value. Max number of sectors 65K should be enough for any proper map.
 
- 	typedef boost::multi_array<TSectorID, 3> TSectorArray;
 
- 	bool valid; //some kind of lazy eval
 
- 	std::map<int3, int3> parent;
 
- 	TSectorArray sector;
 
- 	//std::vector<std::vector<std::vector<unsigned char>>> pathfinderSector;
 
- 	std::map<int, Sector> infoOnSectors;
 
- 	std::shared_ptr<boost::multi_array<TerrainTile *, 3>> visibleTiles;
 
- 	SectorMap();
 
- 	SectorMap(HeroPtr h);
 
- 	void update();
 
- 	void clear();
 
- 	void exploreNewSector(crint3 pos, int num, CCallback * cbp);
 
- 	void write(crstring fname);
 
- 	bool markIfBlocked(TSectorID & sec, crint3 pos, const TerrainTile * t);
 
- 	bool markIfBlocked(TSectorID & sec, crint3 pos);
 
- 	TSectorID & retrieveTile(crint3 pos);
 
- 	TSectorID & retrieveTileN(TSectorArray & vectors, const int3 & pos);
 
- 	const TSectorID & retrieveTileN(const TSectorArray & vectors, const int3 & pos);
 
- 	TerrainTile * getTile(crint3 pos) const;
 
- 	std::vector<const CGObjectInstance *> getNearbyObjs(HeroPtr h, bool sectorsAround);
 
- 	void makeParentBFS(crint3 source);
 
- 	int3 firstTileToGet(HeroPtr h, crint3 dst); //if h wants to reach tile dst, which tile he should visit to clear the way?
 
- 	int3 findFirstVisitableTile(HeroPtr h, crint3 dst);
 
- };
 
 
  |