#pragma once #include #include #include #include #include #include #include #include #include namespace extra2d { class AssetHotReloader { public: struct FileWatchInfo { std::string path; std::filesystem::file_time_type lastWriteTime; Handle textureHandle; Handle shaderHandle; bool isTexture = false; }; explicit AssetHotReloader(const AssetFileSystem &fileSystem); void enable(bool enable); bool enabled() const; void setInterval(float interval); void addFileWatch(const std::string &path, Handle handle); void addFileWatch(const std::string &path, Handle handle); void clear(); void checkForChanges( const std::function &reloadTexture, const std::function &reloadShader); private: void addFileWatchInternal(const std::string &path, FileWatchInfo &&info); const AssetFileSystem &fileSystem_; bool enabled_ = false; float interval_ = 1.0f; std::vector watchList_; mutable std::shared_mutex mutex_; }; } // namespace extra2d