#pragma once #include "Scaleform/G/GFx_StateBag.h" #include "Scaleform/P/Ptr.h" #include "Scaleform/R/RefCountBase.h" #include "Scaleform/R/Render_Color.h" #include "Scaleform/R/Render_ContextImpl_DisplayHandle.h" #include "Scaleform/R/Render_Matrix.h" #include "Scaleform/R/Render_Point.h" #include "Scaleform/R/Render_Rect.h" #include "Scaleform/R/Render_TreeRoot.h" #include "Scaleform/T/ThreadId.h" namespace Scaleform { class MemoryHeap; class StatBag; namespace Render { enum class EdgeAAMode; } namespace GFx { enum class PlayState; class ASMovieRootBase; class Event; class FunctionHandler; class Log; class MovieDef; class Value; class Viewport; class __declspec(novtable) Movie : public RefCountBase, // 00 public StateBag // 10 { public: enum class SetVarType : std::int32_t { kNormal, kSticky, kPermanent }; enum class SetArrayType : std::int32_t { kInt, kDouble, kFloat, kString, kStringW, kValue }; enum class ScaleModeType : std::int32_t { kNoScale, kShowAll, kExactFit, kNoBorder }; enum class AlignType : std::int32_t { kCenter, kTopCenter, kBottomCenter, kCenterLeft, kCenterRight, kTopLeft, kTopRight, kBottomLeft, kBottomRight }; enum HE_ReturnValueType { HE_NotHandled = 0, HE_Handled = 1, HE_NoDefaultAction = 2, HE_Completed = (HE_Handled | HE_NoDefaultAction) }; enum class HitTestType : std::int32_t { kBounds = 0, kShapes = 1, kButtonEvents = 2, kShapesNoInvisible = 3 }; enum class ReportFlags : std::uint32_t { kNone = 0, kShortFileNames = 1 << 0, kNoCircularReferences = 1 << 1, kSuppressOverallStats = 1 << 2, kAddressesForAnonymObjsOnly = 1 << 3, kSuppressMovieDefsStats = 1 << 4, kNoEllipsis = 1 << 5 }; enum class MakeAllVisibleFlags : std::uint32_t { kNone = 0, kDontScaleDown = 1 << 0, kScaleUp50 = 1 << 1, kLeftTopToZero = 1 << 2 }; virtual MovieDef* GetMovieDef() const = 0; // 01 virtual std::uint32_t GetCurrentFrame() const = 0; // 02 virtual bool HasLooped() const = 0; // 03 virtual void GotoFrame(std::uint32_t a_frameNumber) = 0; // 04 virtual bool GotoLabeledFrame(const char* a_label, std::int32_t a_offset = 0) = 0; // 05 virtual void SetPlayState(PlayState a_state) = 0; // 06 virtual PlayState GetPlayState() const = 0; // 07 virtual bool IsValid() = 0; // 08 virtual void SetVisible(bool a_visible) = 0; // 09 virtual bool GetVisible() const = 0; // 0A virtual std::uint64_t GetASTimerMs() const = 0; // 0B virtual void SetViewport(const Viewport& a_viewDesc) = 0; // 0C virtual void GetViewport(Viewport* a_viewDesc) const = 0; // 0D virtual void SetViewScaleMode(ScaleModeType) = 0; // 0E virtual ScaleModeType GetViewScaleMode() const = 0; // 0F virtual void SetViewAlignment(AlignType) = 0; // 10 virtual AlignType GetViewAlignment() const = 0; // 11 virtual Render::Rect GetVisibleFrameRect() const = 0; // 12 virtual Render::Rect GetSafeRect() const = 0; // 13 virtual void SetSafeRect(const Render::Rect& a_rect) = 0; // 14 virtual void SetEdgeAAMode(Render::EdgeAAMode a_edgeAA) = 0; // 15 virtual Render::EdgeAAMode GetEdgeAAMode() const = 0; // 16 virtual void Restart(bool a_advance0 = true) = 0; // 17 virtual float Advance(float a_deltaT, std::uint32_t a_frameCatchUpCount = 2, bool a_capture = true) = 0; // 18 virtual void Capture(bool a_onChangeOnly = true) = 0; // 19 virtual const Render::ContextImpl::DisplayHandle& GetDisplayHandle() const = 0; // 1A virtual void SetCaptureThread(ThreadId a_captureThreadId) = 0; // 1B virtual void ShutdownRendering(bool a_wait) = 0; // 1C virtual bool IsShutdownRenderingComplete() const = 0; // 1D virtual void SetPause(bool a_pause) = 0; // 1E virtual bool IsPaused() const = 0; // 1F virtual void SetBackgroundColor(Render::Color a_bgColor) = 0; // 20 virtual void SetBackgroundAlpha(float a_alpha) = 0; // 21 virtual float GetBackgroundAlpha() const = 0; // 22 virtual std::uint32_t HandleEvent(const Event& a_event) = 0; // 23 virtual void GetMouseState(std::uint32_t a_mouseIndex, float* a_x, float* a_y, std::uint32_t* a_buttons) = 0; // 24 virtual void NotifyMouseState(float a_x, float a_y, std::uint32_t a_buttons, std::uint32_t a_mouseIndex = 0) = 0; // 25 virtual bool HitTest(float a_x, float a_y, HitTestType a_testCond = HitTestType::kShapes, std::uint32_t a_controllerIdx = 0) = 0; // 26 virtual void* GetUserData() const = 0; // 27 virtual void SetUserData(void*) = 0; // 28 virtual bool IsMovieFocused() const = 0; // 29 virtual bool GetDirtyFlag(bool a_doReset = true) = 0; // 2A virtual void SetMouseCursorCount(std::uint32_t a_num) = 0; // 2B virtual std::uint32_t GetMouseCursorCount() const = 0; // 2C virtual void SetControllerCount(std::uint32_t a_num) = 0; // 2D virtual std::uint32_t GetControllerCount() const = 0; // 2E virtual void GetStats(StatBag* a_bag, bool a_reset = true) = 0; // 2F virtual MemoryHeap* GetHeap() const = 0; // 30 virtual void ForceCollectGarbage() = 0; // 31 virtual void SuspendGC(bool a_suspend) = 0; // 32 virtual void ScheduleGC() = 0; // 33 virtual void PrintObjectsReport(ReportFlags a_flags = ReportFlags::kNone, Log* a_log = nullptr, const char* a_swfName = nullptr) = 0; // 34 virtual Render::Point TranslateToScreen(const Render::Point& a_pt, Render::Matrix2x4* a_userMatrix = nullptr) = 0; // 36 virtual Render::Rect TranslateToScreen(const Render::Rect& a_pt, Render::Matrix2x4* a_userMatrix = nullptr) = 0; // 35 virtual bool TranslateLocalToScreen(const char* a_pathToCharacter, const Render::Point& a_pt, Render::Point* a_presPt, Render::Matrix2x4* a_userMatrix = nullptr) = 0; // 37 virtual bool SetControllerFocusGroup(std::uint32_t a_controllerIdx, std::uint32_t a_focusGroupIndex) = 0; // 38 virtual std::uint32_t GetControllerFocusGroup(std::uint32_t a_controllerIdx) const = 0; // 39 virtual void ResetInputFocus(std::uint32_t a_controllerIdx) = 0; // 3A virtual bool IsExitRequested() const = 0; // 3B virtual void GetViewMatrix3D(Render::Matrix3x4*) = 0; // 3C virtual void SetViewMatrix3D(const Render::Matrix3x4& a_matrix) = 0; // 3D virtual void GetProjectionMatrix3D(Render::Matrix4x4*) = 0; // 3E virtual void SetProjectionMatrix3D(const Render::Matrix4x4& a_matrix) = 0; // 3F virtual void SetStageAutoOrients(bool a_value = true) = 0; // 40 virtual void ForceUpdateImages() = 0; // 41 virtual void MakeAreaVisible(const Render::Rect& a_screenRect, const Render::Rect& a_box, MakeAllVisibleFlags a_flags = MakeAllVisibleFlags::kNone) = 0; // 42 virtual void RestoreViewport() = 0; // 43 void CreateArray(Value* a_value); void CreateFunction(Value* a_value, FunctionHandler* a_function, void* a_userData = nullptr); void CreateObject(Value* a_value, const char* a_className = nullptr, const GFx::Value* a_args = nullptr, std::uint32_t a_numArgs = 0); bool GetVariable(Value* a_val, const char* a_pathToVar) const; bool SetVariable(const char* a_pathToVar, const Value& a_value, SetVarType a_setType = SetVarType::kSticky); bool Invoke(const char* a_methodName, Value* a_result, const char* a_argFmt, ...); bool Invoke(const char* a_methodName, Value* a_result, const Value* a_args, std::uint32_t a_numArgs); bool InvokeArgs(const char* a_methodName, Value* a_result, const char* a_argFmt, std::va_list a_args); void Release() { using func_t = decltype(&Movie::Release); static REL::Relocation func{ ID::GFx::Movie::Release }; return func(this); } // members Ptr asMovieRoot; // 18 }; static_assert(sizeof(Movie) == 0x20); } }