#pragma once #include "Scaleform/A/Array.h" #include "Scaleform/G/GFx_ASIntervalTimerIntf.h" #include "Scaleform/G/GFx_ASString.h" #include "Scaleform/G/GFx_FocusGroupDescr.h" #include "Scaleform/G/GFx_Movie.h" #include "Scaleform/G/GFx_MultitouchInterface.h" #include "Scaleform/G/GFx_Value.h" #include "Scaleform/G/GFx_Viewport.h" #include "Scaleform/L/List.h" #include "Scaleform/N/NewOverrideBase.h" #include "Scaleform/P/Ptr.h" #include "Scaleform/R/Render_Color.h" #include "Scaleform/R/Render_ContextImpl_Context.h" #include "Scaleform/R/Render_ContextImpl_DisplayHandle.h" #include "Scaleform/R/Render_Matrix.h" #include "Scaleform/R/Render_Point.h" #include "Scaleform/R/Render_ScreenToWorld.h" #include "Scaleform/R/Render_TreeRoot.h" #include "Scaleform/S/StatBasicValues.h" namespace Scaleform { class MemoryHeap; namespace Render { class DrawableImageContext; class ThreadCommandQueue; class TreeContainer; class TreeNode; } namespace GFx { class AmpStats; class ASMovieRootBase; class DisplayObjContainer; class DisplayObjectBase; class DrawingContext; class ExternalInterface; class ExternalLibPtr; class FontManagerStates; class FontResource; class FSCommandHandler; class IMECandidateListStyle; class InteractiveObject; class LoadQueueEntry; class LoadQueueEntryMT; class MovieDef; class MovieDefImpl; class MovieDefRootNode; class StateBagImpl; class UserEventHandler; class __declspec(novtable) alignas(0x10) MovieImpl : public Movie // 00 { public: using MultitouchInputMode = MultitouchInterface::MultitouchInputMode; using GestureMask = MultitouchInterface::GestureMask; class DragState { public: constexpr DragState() = default; // members InteractiveObject* character{ nullptr }; // 00 InteractiveObject* topmostEntity{ nullptr }; // 08 bool lockCenter{ false }; // 10 bool bound{ false }; // 11 Render::Point boundLT{ 0.0f, 0.0f }; // 14 Render::Point boundRB{ 0.0f, 0.0f }; // 1C Render::Point centerDelta{ 0.0f, 0.0f }; // 24 std::uint32_t mouseIndex; // 2C }; static_assert(sizeof(DragState) == 0x30); class FontDesc { public: // members Ptr movieDef; Ptr font; }; static_assert(sizeof(FontDesc) == 0x10); class IndirectTransPair { public: // members Ptr transformParent; Ptr obj; Ptr originalParent; mutable std::int32_t origParentDepth{ -1 }; }; static_assert(sizeof(IndirectTransPair) == 0x20); class LevelInfo { public: // members std::int32_t level; Ptr sprite; }; static_assert(sizeof(IndirectTransPair) == 0x20); class MDKillListEntry { public: // members std::uint64_t killFrameId; Ptr movieDef; }; static_assert(sizeof(MDKillListEntry) == 0x10); class ReturnValueHolder : public NewOverrideBase { public: // members char* charBuffer; // 00 std::uint32_t charBufferSize; // 08 ArrayCC stringArray; // 10 std::uint32_t stringArrayPos; // 30 }; static_assert(sizeof(ReturnValueHolder) == 0x38); // members LoadQueueEntry* loadQueueHead; // 0020 std::uint32_t lastLoadQueueEntryCount; // 0028 Ptr advanceStats; // 0030 Value::ObjectInterface* objectInterface; // 0038 MemoryHeap* heap; // 0040 Ptr mainMovieDef; // 0048 InteractiveObject* mainMovie; // 0050 ArrayLH movieLevels; // 0058 List rootMovieDefNodes; // 0070 Ptr stateBag; // 0080 Ptr renderRoot; // 0088 Render::ContextImpl::DisplayHandle displayRoot; // 0090 Ptr topMostRoot; // 0098 Viewport viewport; // 00A0 float pixelScale; // 00D4 float viewScaleX; // 00D8 float viewScaleY; // 00DC float viewOffsetX; // 00E8 float viewOffsetY; // 00E4 ScaleModeType viewScaleMode; // 00E8 AlignType viewAlignment; // 00EC Render::Rect visibleFrameRect; // 00F0 Render::Rect safeRect; // 0100 Render::Matrix2x4 viewportMatrix; // 0110 Render::ScreenToWorld screenToWorld; // 0130 mutable Ptr cachedLog; // 0220 Ptr userEventHandler; // 0228 Ptr fsCommandHandler; // 0230 Ptr externalInterfaceHandler; // 0238 Ptr fontManagerStates; // 0240 ExternalLibPtr* xmlObjectManager; // 0248 std::uint64_t timeElapsed; // 0250 float timeRemainder; // 0258 float frameTime; // 025C std::uint32_t forceFrameCatchUp; // 0260 std::byte pad268[0x1F60]; // 0268 - GFx::InputEventsQueue Render::Color backgroundColor; // 21C8 std::byte pad21D0[0x50]; // 21D0 - MouseState[1] std::uint32_t mouseCursorCount; // 2220 std::uint32_t controllerCount; // 2224 void* userData; // 2228 std::byte pad2230[0x688]; // 2230 - KeyboardState[1] ReturnValueHolder* returnValueHolder; // 28B8 std::uint32_t instanceNameCount; // 28C0 DragState currentDragState; // 28C8 std::byte pad28F8[0x8]; // 28F8 - ASStringHash ArrayLH, kStatMV_Other_Mem> topmostLevelCharacters; // 2900 std::uint64_t startTickMS; // 2918 std::uint64_t pauseTickMS; // 2920 ArrayLH, kStatMV_Other_Mem> intervalTimers; // 2928 std::int32_t lastIntervalTimerId; // 2940 Ptr focusRectContainerNode; // 2948 FocusGroupDescr focusGroups[16]; // 2950 std::uint32_t focusGroupsCount; // 2F50 std::uint8_t focusGroupIndexes[16]; // 2F54 bool focusRectChanged; // 2F64 InteractiveObject* playListHead; // 2F68 InteractiveObject* playListOptHead; // 2F70 InteractiveObject* unloadListHead; // 2F78 std::uint32_t flags; // 2F80 std::uint32_t flags2; // 2F84 IMECandidateListStyle* imeCandidateListStyle; // 2F88 LoadQueueEntryMT* loadQueueMTHead; // 2F90 ArrayLH registeredFonts; // 2F98 List drawingContextList; // 2FB0 Array movieDefKillList; // 2FC0 Ptr savedASMovieRoot; // 2FD8 Render::ContextImpl::Context renderContext; // 2FE0 std::int8_t previouslyCaptured; // 30F0 Ptr drawableImageContext; // 30F8 Render::ThreadCommandQueue* renderThreadCommandQueue; // 3100 Ptr multitouchHAL; // 3108 MultitouchInputMode multitouchMode; // 3110 Ptr gestureTopMostChar; // 3118 std::int32_t deviceOrientation; // 3120 - OrientationEvent::OrientationType ArrayLH indirectTransformPairs; }; static_assert(sizeof(MovieImpl) == 0x3140); } }