#pragma once #include "Scaleform/G/GFx_FileTypeConstants.h" #include "Scaleform/G/GFx_MemoryParams.h" #include "Scaleform/G/GFx_Resource.h" #include "Scaleform/G/GFx_StateBag.h" #include "Scaleform/R/Render_Point.h" #include "Scaleform/R/Render_Rect.h" namespace Scaleform { class MemoryHeap; namespace Render { class ThreadCommandQueue; } namespace GFx { class ActionControl; class ExporterInfo; class MemoryContext; class Movie; class ResourceId; class __declspec(novtable) MovieDef : public Resource, // 00 public StateBag // 18 { public: enum class FileAttrFlags : std::uint32_t { kUseNetwork = 1 << 0, kUseActionScript3 = 1 << 3, kHasMetadata = 1 << 4 }; enum class VisitResourceMask : std::uint32_t { kNestedMovies = 1 << 15, kFonts = 1 << 0, kBitmaps = 1 << 1, kGradientImages = 1 << 2, kEditTextFields = 1 << 3, kSounds = 1 << 4, kSprite = 1 << 5, kAllLocalImages = (kBitmaps | kGradientImages), kAllImages = (kBitmaps | kGradientImages | kNestedMovies) }; class __declspec(novtable) ImportVisitor { public: virtual ~ImportVisitor() = default; // 00 // add virtual void Visit(MovieDef* a_parentDef, MovieDef* a_importDef, const char* a_importedMovieFilename) = 0; // 01 }; static_assert(sizeof(ImportVisitor) == 0x8); class __declspec(novtable) ResourceVisitor : public FileTypeConstants // 00 { public: virtual ~ResourceVisitor() = default; // 00 // add virtual void Visit(MovieDef* a_movieDef, Resource* a_resource, ResourceId a_rid, const char* a_exportName) = 0; // 01 }; static_assert(sizeof(ResourceVisitor) == 0x8); // add virtual std::uint32_t GetVersion() const = 0; // 04 virtual std::uint32_t GetLoadingFrame() const = 0; // 05 virtual float GetWidth() const = 0; // 06 virtual float GetHeight() const = 0; // 07 virtual std::uint32_t GetFrameCount() const = 0; // 08 virtual float GetFrameRate() const = 0; // 09 virtual Render::Rect GetFrameRect() const = 0; // 0A virtual std::uint32_t GetSWFFlags() const = 0; // 0B virtual const char* GetFileURL() const = 0; // 0C virtual void WaitForLoadFinish(bool a_cancel = false) const = 0; // 0D virtual void WaitForFrame(std::uint32_t a_frame) const = 0; // 0E virtual FileAttrFlags GetFileAttributes() const = 0; // 0F virtual std::uint32_t GetMetadata(char* a_buff, std::uint32_t a_buffSize) const = 0; // 10 virtual MemoryHeap* GetLoadDataHeap() const = 0; // 11 virtual MemoryHeap* GetBindDataHeap() const = 0; // 12 virtual MemoryHeap* GetImageHeap() const = 0; // 13 virtual Resource* GetMovieDataResource() const = 0; // 14 virtual const ExporterInfo* GetExporterInfo() const = 0; // 15 virtual MemoryContext* CreateMemoryContext(const char* a_heapName, const MemoryParams& a_memParams, bool a_debugHeap) = 0; // 16 virtual Movie* CreateInstance(const MemoryParams& a_memParams, bool a_initFirstFrame, ActionControl* a_actionControl, Render::ThreadCommandQueue* a_queue = nullptr) = 0; // 18 virtual Movie* CreateInstance(MemoryContext* a_memContext, bool a_initFirstFrame, ActionControl* a_actionControl, Render::ThreadCommandQueue* a_queue = nullptr) = 0; // 17 virtual void VisitImportedMovies(ImportVisitor* a_visitor) = 0; // 19 virtual void VisitResources(ResourceVisitor* a_visitor, VisitResourceMask a_visitMask = VisitResourceMask::kAllImages) = 0; // 1A virtual Resource* GetResource(const char* a_exportName) const = 0; // 1B [[nodiscard]] Movie* CreateInstance( bool a_initFirstFrame = false, std::size_t a_memoryArena = 0, ActionControl* a_actionControl = nullptr, Render::ThreadCommandQueue* a_queue = nullptr) { MemoryParams memParams; memParams.desc.arena = a_memoryArena; return CreateInstance(memParams, a_initFirstFrame, a_actionControl, a_queue); } }; static_assert(sizeof(MovieDef) == 0x20); } }