/* * RenderHandler.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 "../render/IRenderHandler.h" VCMI_LIB_NAMESPACE_BEGIN class EntityService; VCMI_LIB_NAMESPACE_END class CDefFile; class SDLImageShared; class ISharedImage; class RenderHandler : public IRenderHandler { using AnimationLayoutMap = std::map>; std::map> animationFiles; std::map animationLayouts; std::map> imageFiles; std::map> fonts; std::shared_ptr getAnimationFile(const AnimationPath & path); std::optional getPathForScaleFactor(const ResourcePath & path, const std::string & factor); std::pair getScalePath(const ResourcePath & p); AnimationLayoutMap & getAnimationLayout(const AnimationPath & path); void initFromJson(AnimationLayoutMap & layout, const JsonNode & config); void addImageListEntry(size_t index, size_t group, const std::string & listName, const std::string & imageName); void addImageListEntries(const EntityService * service); void storeCachedImage(const ImageLocator & locator, std::shared_ptr image); std::shared_ptr loadImageImpl(const ImageLocator & config); std::shared_ptr loadImageFromFileUncached(const ImageLocator & locator); std::shared_ptr loadImageFromFile(const ImageLocator & locator); std::shared_ptr transformImage(const ImageLocator & locator, std::shared_ptr image); std::shared_ptr scaleImage(const ImageLocator & locator, std::shared_ptr image); ImageLocator getLocatorForAnimationFrame(const AnimationPath & path, int frame, int group); int getScalingFactor() const; public: // IRenderHandler implementation void onLibraryLoadingFinished(const Services * services) override; std::shared_ptr loadImage(const ImageLocator & locator, EImageBlitMode mode) override; std::shared_ptr loadImage(const ImagePath & path, EImageBlitMode mode) override; std::shared_ptr loadImage(const AnimationPath & path, int frame, int group, EImageBlitMode mode) override; std::shared_ptr loadAnimation(const AnimationPath & path, EImageBlitMode mode) override; std::shared_ptr createImage(SDL_Surface * source) override; /// Returns font with specified identifer std::shared_ptr loadFont(EFonts font) override; };