#pragma once #include "ResourceDisplay.hpp" #include #include #include #include class ImageResourceDisplay : public ResourceDisplay { public: virtual void update(World& w) override; virtual bool load(ResourceManager& rMan, const std::string& fileName, const std::string& fileData) override; virtual bool update_draw() const override; virtual void draw(SkCanvas* canvas, const DrawData& drawData, const SkRect& imRect) override; virtual Vector2f get_dimensions() const override; virtual float get_dimension_scale() const override; virtual Type get_type() const override; virtual ~ImageResourceDisplay() override; private: struct FrameData { sk_sp data; float duration; }; std::vector frames; SkImageInfo imageInfo; void load_thread(); int totalFramesToLoad; std::atomic loadedFrames = 0; sk_sp imageRawData; std::unique_ptr codec; std::atomic shutdownLoadThread = false; std::unique_ptr loadThread; float currentTime = 0.0f; int frameIndex = 0; bool mustUpdateDraw = false; bool loadedFirstFrame = false; };