| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 | 
							- /*
 
-  * MapRenderer.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 "../../lib/filesystem/ResourcePath.h"
 
- VCMI_LIB_NAMESPACE_BEGIN
 
- class int3;
 
- class ObjectInstanceID;
 
- class CGObjectInstance;
 
- VCMI_LIB_NAMESPACE_END
 
- class CAnimation;
 
- class IImage;
 
- class Canvas;
 
- class IMapRendererContext;
 
- enum class EImageBlitMode : uint8_t;
 
- class MapTileStorage
 
- {
 
- 	using TerrainAnimation = std::array<std::shared_ptr<CAnimation>, 4>;
 
- 	std::vector<TerrainAnimation> animations;
 
- public:
 
- 	explicit MapTileStorage(size_t capacity);
 
- 	void load(size_t index, const AnimationPath & filename, EImageBlitMode blitMode);
 
- 	std::shared_ptr<IImage> find(size_t fileIndex, size_t rotationIndex, size_t imageIndex);
 
- };
 
- class MapRendererTerrain
 
- {
 
- 	MapTileStorage storage;
 
- public:
 
- 	MapRendererTerrain();
 
- 	uint8_t checksum(IMapRendererContext & context, const int3 & coordinates);
 
- 	void renderTile(IMapRendererContext & context, Canvas & target, const int3 & coordinates);
 
- };
 
- class MapRendererRiver
 
- {
 
- 	MapTileStorage storage;
 
- public:
 
- 	MapRendererRiver();
 
- 	uint8_t checksum(IMapRendererContext & context, const int3 & coordinates);
 
- 	void renderTile(IMapRendererContext & context, Canvas & target, const int3 & coordinates);
 
- };
 
- class MapRendererRoad
 
- {
 
- 	MapTileStorage storage;
 
- public:
 
- 	MapRendererRoad();
 
- 	uint8_t checksum(IMapRendererContext & context, const int3 & coordinates);
 
- 	void renderTile(IMapRendererContext & context, Canvas & target, const int3 & coordinates);
 
- };
 
- class MapRendererObjects
 
- {
 
- 	std::map<AnimationPath, std::shared_ptr<CAnimation>> animations;
 
- 	std::shared_ptr<CAnimation> getBaseAnimation(const CGObjectInstance * obj);
 
- 	std::shared_ptr<CAnimation> getFlagAnimation(const CGObjectInstance * obj);
 
- 	std::shared_ptr<CAnimation> getOverlayAnimation(const CGObjectInstance * obj);
 
- 	std::shared_ptr<CAnimation> getAnimation(const AnimationPath & filename, bool generateMovementGroups);
 
- 	std::shared_ptr<IImage> getImage(IMapRendererContext & context, const CGObjectInstance * obj, const std::shared_ptr<CAnimation> & animation) const;
 
- 	void renderImage(IMapRendererContext & context, Canvas & target, const int3 & coordinates, const CGObjectInstance * object, const std::shared_ptr<IImage> & image);
 
- 	void renderObject(IMapRendererContext & context, Canvas & target, const int3 & coordinates, const CGObjectInstance * obj);
 
- public:
 
- 	uint8_t checksum(IMapRendererContext & context, const int3 & coordinates);
 
- 	void renderTile(IMapRendererContext & context, Canvas & target, const int3 & coordinates);
 
- };
 
- class MapRendererBorder
 
- {
 
- 	std::shared_ptr<CAnimation> animation;
 
- 	size_t getIndexForTile(IMapRendererContext & context, const int3 & coordinates);
 
- public:
 
- 	MapRendererBorder();
 
- 	uint8_t checksum(IMapRendererContext & context, const int3 & coordinates);
 
- 	void renderTile(IMapRendererContext & context, Canvas & target, const int3 & coordinates);
 
- };
 
- class MapRendererFow
 
- {
 
- 	std::shared_ptr<CAnimation> fogOfWarFullHide;
 
- 	std::shared_ptr<CAnimation> fogOfWarPartialHide;
 
- public:
 
- 	MapRendererFow();
 
- 	uint8_t checksum(IMapRendererContext & context, const int3 & coordinates);
 
- 	void renderTile(IMapRendererContext & context, Canvas & target, const int3 & coordinates);
 
- };
 
- class MapRendererPath
 
- {
 
- 	std::shared_ptr<CAnimation> pathNodes;
 
- 	size_t selectImageReachability(bool reachableToday, size_t imageIndex);
 
- 	size_t selectImageCross(bool reachableToday, const int3 & curr);
 
- 	size_t selectImageArrow(bool reachableToday, const int3 & curr, const int3 & prev, const int3 & next);
 
- 	size_t selectImage(IMapRendererContext & context, const int3 & coordinates);
 
- public:
 
- 	MapRendererPath();
 
- 	uint8_t checksum(IMapRendererContext & context, const int3 & coordinates);
 
- 	void renderTile(IMapRendererContext & context, Canvas & target, const int3 & coordinates);
 
- };
 
- class MapRendererOverlay
 
- {
 
- 	std::shared_ptr<IImage> imageGrid;
 
- 	std::shared_ptr<IImage> imageVisitable;
 
- 	std::shared_ptr<IImage> imageBlocked;
 
- 	std::shared_ptr<IImage> imageSpellRange;
 
- public:
 
- 	MapRendererOverlay();
 
- 	uint8_t checksum(IMapRendererContext & context, const int3 & coordinates);
 
- 	void renderTile(IMapRendererContext & context, Canvas & target, const int3 & coordinates);
 
- };
 
- class MapRenderer
 
- {
 
- 	MapRendererTerrain rendererTerrain;
 
- 	MapRendererRiver rendererRiver;
 
- 	MapRendererRoad rendererRoad;
 
- 	MapRendererBorder rendererBorder;
 
- 	MapRendererFow rendererFow;
 
- 	MapRendererObjects rendererObjects;
 
- 	MapRendererPath rendererPath;
 
- 	MapRendererOverlay rendererOverlay;
 
- public:
 
- 	using TileChecksum = std::array<uint8_t, 8>;
 
- 	TileChecksum getTileChecksum(IMapRendererContext & context, const int3 & coordinates);
 
- 	void renderTile(IMapRendererContext & context, Canvas & target, const int3 & coordinates);
 
- };
 
 
  |