/* * 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 "MapRendererContext.h" VCMI_LIB_NAMESPACE_BEGIN class int3; class ObjectInstanceID; class CGObjectInstance; VCMI_LIB_NAMESPACE_END class CAnimation; class IImage; class Canvas; class MapTileStorage { using TerrainAnimation = std::array, 4>; std::vector animations; public: explicit MapTileStorage(size_t capacity); void load(size_t index, const std::string & filename); std::shared_ptr find(size_t fileIndex, size_t rotationIndex, size_t imageIndex); }; class MapRendererTerrain { MapTileStorage storage; public: MapRendererTerrain(); void renderTile(const IMapRendererContext & context, Canvas & target, const int3 & coordinates); }; class MapRendererRiver { MapTileStorage storage; public: MapRendererRiver(); void renderTile(const IMapRendererContext & context, Canvas & target, const int3 & coordinates); }; class MapRendererRoad { MapTileStorage storage; public: MapRendererRoad(); void renderTile(const IMapRendererContext & context, Canvas & target, const int3 & coordinates); }; class MapRendererObjects { std::map> animations; std::shared_ptr getBaseAnimation(const CGObjectInstance * obj); std::shared_ptr getFlagAnimation(const CGObjectInstance * obj); std::shared_ptr getOverlayAnimation(const CGObjectInstance * obj); std::shared_ptr getAnimation(const std::string & filename, bool generateMovementGroups); std::shared_ptr getImage(const IMapRendererContext & context, const CGObjectInstance * obj, const std::shared_ptr & animation) const; void renderImage(const IMapRendererContext & context, Canvas & target, const int3 & coordinates, const CGObjectInstance * object, const std::shared_ptr & image); void renderObject(const IMapRendererContext & context, Canvas & target, const int3 & coordinates, const CGObjectInstance * obj); public: void renderTile(const IMapRendererContext & context, Canvas & target, const int3 & coordinates); }; class MapRendererBorder { std::unique_ptr animation; size_t getIndexForTile(const IMapRendererContext & context, const int3 & coordinates); public: MapRendererBorder(); void renderTile(const IMapRendererContext & context, Canvas & target, const int3 & coordinates); }; class MapRendererFow { std::unique_ptr fogOfWarFullHide; std::unique_ptr fogOfWarPartialHide; public: MapRendererFow(); void renderTile(const IMapRendererContext & context, Canvas & target, const int3 & coordinates); }; class MapRendererPath { std::unique_ptr pathNodes; void renderImage(Canvas & target, bool reachableToday, size_t imageIndex); void renderImageCross(Canvas & target, bool reachableToday, const int3 & curr); void renderImageArrow(Canvas & target, bool reachableToday, const int3 & curr, const int3 & prev, const int3 & next); public: MapRendererPath(); void renderTile(const IMapRendererContext & context, Canvas & target, const int3 & coordinates); }; class MapRendererDebug { std::shared_ptr imageGrid; std::shared_ptr imageVisitable; std::shared_ptr imageBlockable; public: MapRendererDebug(); void renderTile(const IMapRendererContext & context, Canvas & target, const int3 & coordinates); }; class MapRendererOverlay { std::unique_ptr iconsStorage; public: MapRendererOverlay(); void renderTile(const IMapRendererContext & context, Canvas & target, const int3 & coordinates); }; class MapRenderer { MapRendererTerrain rendererTerrain; MapRendererRiver rendererRiver; MapRendererRoad rendererRoad; MapRendererBorder rendererBorder; MapRendererFow rendererFow; MapRendererObjects rendererObjects; MapRendererPath rendererPath; MapRendererDebug rendererDebug; public: void renderTile(const IMapRendererContext & context, Canvas & target, const int3 & coordinates); };