/* * 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 IConstImage; class RenderHandler : public IRenderHandler { using AnimationLayoutMap = std::map>; struct AnimationLocator { AnimationPath animation; int frame = -1; int group = -1; bool operator < (const AnimationLocator & other) const { if (animation != other.animation) return animation < other.animation; if (group != other.group) return group < other.group; return frame < other.frame; } }; std::map> animationFiles; std::map animationLayouts; std::map> imageFiles; std::map> animationFrames; std::shared_ptr getAnimationFile(const AnimationPath & path); 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); public: // IRenderHandler implementation void onLibraryLoadingFinished(const Services * services) override; std::shared_ptr loadImage(const ImagePath & path) override; std::shared_ptr loadImage(const ImagePath & path, EImageBlitMode mode) override; std::shared_ptr loadImage(const AnimationPath & path, int frame, int group) override; std::shared_ptr loadAnimation(const AnimationPath & path) override; std::shared_ptr createImage(SDL_Surface * source) override; std::shared_ptr createAnimation() override; };