#pragma once #include "Scaleform/A/Array.h" #include "Scaleform/G/GFx_FocusMovedType.h" #include "Scaleform/G/GFx_Movie.h" #include "Scaleform/P/Ptr.h" #include "Scaleform/R/RefCountBase.h" #include "Scaleform/R/Render_Point.h" namespace Scaleform { class MemoryHeap; class String; namespace Render::Text { class Allocator; } namespace GFx { class AccelerometerEvent; class AmpMovieObjectDesc; class AppLifecycleEvent; class ASString; class ASStringManager; class ASSupport; class DisplayObjContainer; class DisplayObject; class EventId; class FunctionHandler; class GeolocationEvent; class InputEventsQueueEntry; class InteractiveObject; class LoadQueueEntry; class LoadStates; class MemoryContext; class MouseState; class MovieDefImpl; class MovieDefRootNode; class MovieImpl; class OrientationEvent; class ProcessFocusKeyInfo; class Value; class __declspec(novtable) ASMovieRootBase : public RefCountBase // 00 { public: // add virtual void SetMovie(MovieImpl* a_movie) { movieImpl = a_movie; } // 01 virtual void AdvanceFrame(bool a_nextFrame) = 0; // 02 virtual void ChangeMouseCursorType(std::uint32_t a_mouseIdx, std::uint32_t a_newCursorType) = 0; // 03 virtual bool CheckAvm() = 0; // 04 virtual void ClearDisplayList() = 0; // 05 virtual MovieDefRootNode* CreateMovieDefRootNode(MemoryHeap* a_heap, MovieDefImpl* a_defImpl, bool a_importFlag) = 0; // 06 virtual void DoActions() = 0; // 07 virtual InteractiveObject* FindTarget(const ASString& a_path) const = 0; // 08 virtual void ForceCollect() = 0; // 09 virtual void ForceEmergencyCollect() = 0; // 0A virtual void SuspendGC(bool a_suspend) = 0; // 0B virtual void ScheduleGC() = 0; // 0C virtual void GenerateMouseEvents(std::uint32_t mouseIndex) = 0; // 0D virtual void GenerateTouchEvents([[maybe_unused]] std::uint32_t a_mouseStateIndex) { return; } // 0E virtual void GenerateGestureEvents( // 0F [[maybe_unused]] InteractiveObject* a_topmost, [[maybe_unused]] std::uint32_t a_phase, [[maybe_unused]] const Render::Point& a_pos, [[maybe_unused]] const Render::Point& a_offset, [[maybe_unused]] const Render::Point& a_scale, [[maybe_unused]] float a_rotation, [[maybe_unused]] std::uint32_t a_gestureMask) {} virtual DisplayObjContainer* GetRootMovie(DisplayObject* dobj = nullptr) const = 0; // 10 virtual bool Init(MovieDefImpl* a_movieDef) = 0; // 11 virtual void NotifyMouseEvent(const InputEventsQueueEntry* a_qe, const MouseState& a_ms, std::int32_t a_mi) = 0; // 12 virtual void NotifyOnResize() = 0; // 13 virtual void NotifyQueueSetFocus(InteractiveObject* a_ch, std::uint32_t a_controllerIdx, FocusMovedType a_fmt) = 0; // 14 virtual void NotifyTransferFocus(InteractiveObject* a_curFocused, InteractiveObject* a_newFocus, std::uint32_t a_controllerIdx) = 0; // 15 virtual bool NotifyOnFocusChange(InteractiveObject* a_curFocused, InteractiveObject* a_toBeFocused, std::uint32_t a_controllerIdx, FocusMovedType a_fmt, ProcessFocusKeyInfo* a_focusKeyInfo = nullptr) = 0; // 16 virtual void NotifyGamePadAnalogEvent([[maybe_unused]] const EventId* a_id) { return; } // 17 virtual void NotifyStatusEvent([[maybe_unused]] const EventId* a_id) { return; } // 18 virtual void NotifyAccelerometerEvent([[maybe_unused]] const EventId* a_id, [[maybe_unused]] std::int32_t a_evtIDAcc) { return; } // 19 virtual void NotifyGeolocationEvent([[maybe_unused]] const EventId* a_id, [[maybe_unused]] std::int32_t a_evtIDGeo) { return; } // 1A virtual void OnMovieFocus(bool a_set) = 0; // 1B virtual void OnNextFrame() = 0; // 1C virtual void OnDeviceOrientationChanged([[maybe_unused]] const OrientationEvent&) { return; } // 1D virtual void OnAppLifecycleEvent([[maybe_unused]] const AppLifecycleEvent&) { return; } // 1E virtual void OnAccelerometerEvent([[maybe_unused]] const AccelerometerEvent&) { return; } // 1F virtual void OnGeolocationEvent([[maybe_unused]] const GeolocationEvent&) { return; } // 20 virtual void PrintObjectsReport([[maybe_unused]] std::uint32_t a_flags = 0, [[maybe_unused]] Log* a_log = nullptr, [[maybe_unused]] const char* a_swfName = nullptr) { return; } // 21 virtual void GetObjectsTree([[maybe_unused]] Array>* a_rootObjects, [[maybe_unused]] MemoryHeap* a_heap) { return; } // 22 virtual AmpMovieObjectDesc* GetDisplayObjectsTree([[maybe_unused]] MemoryHeap* a_heap) { return nullptr; } // 23 virtual void ProcessLoadQueueEntry(LoadQueueEntry* a_entry, LoadStates* a_ls) = 0; // 24 virtual void ProcessLoadVarsMT(LoadQueueEntry* a_entry, LoadStates* a_ls, const String& a_data, std::size_t a_fileLen, bool a_succeeded) = 0; // 25 virtual void ProcessLoadBinaryMT( // 26 [[maybe_unused]] LoadQueueEntry* a_entry, [[maybe_unused]] LoadStates* a_ls, [[maybe_unused]] const ArrayPOD& a_data, [[maybe_unused]] std::size_t a_fileLen, [[maybe_unused]] bool a_succeeded) {} virtual void RegisterAuxASClasses() = 0; // 27 virtual void ResolveStickyVariables(InteractiveObject* a_character) = 0; // 28 virtual void SetExternalInterfaceRetVal(const Value&) = 0; // 29 virtual void SetMemoryParams(std::uint32_t a_frameBetweenCollections, std::uint32_t a_maxRootCount) = 0; // 2A virtual void Shutdown() = 0; // 2B virtual void CreateString(Value* a_value, const char* a_string) = 0; // 2C virtual void CreateStringW(Value* a_value, const wchar_t* a_string) = 0; // 2D virtual void CreateObject(Value* a_value, const char* a_className = nullptr, const Value* a_args = nullptr, std::uint32_t a_numArgs = 0) = 0; // 2E virtual void CreateArray(Value* a_value) = 0; // 2F virtual void CreateFunction(Value* a_value, FunctionHandler* a_fc, void* a_userData = nullptr) = 0; // 30 virtual bool SetVariable(const char* a_pathToVar, const Value& a_value, Movie::SetVarType a_setType = Movie::SetVarType::kSticky) = 0; // 31 virtual bool GetVariable(Value* a_val, const char* a_pathToVar) const = 0; // 32 virtual bool SetVariableArray(Movie::SetArrayType a_type, const char* a_pathToVar, std::uint32_t a_index, const void* a_data, std::uint32_t a_count, Movie::SetVarType a_setType = Movie::SetVarType::kSticky) = 0; // 33 virtual bool SetVariableArraySize(const char* a_pathToVar, std::uint32_t a_count, Movie::SetVarType a_setType = Movie::SetVarType::kSticky) = 0; // 35 virtual std::uint32_t GetVariableArraySize(const char* a_pathToVar) = 0; // 34 virtual bool GetVariableArray(Movie::SetArrayType a_type, const char* a_pathToVar, std::uint32_t a_index, void* a_data, std::uint32_t a_count) = 0; // 36 virtual bool IsAvailable(const char* ppathToVar) const = 0; // 37 virtual bool Invoke(const char* a_pathToMethod, Value* a_result, const Value* a_args, std::uint32_t a_numArgs) = 0; // 39 virtual bool Invoke(const char* a_pathToMethod, Value* a_result, const char* a_argFmt, ...) = 0; // 38 virtual bool InvokeArgs(const char* a_pathToMethod, Value* a_result, const char* a_argFmt, std::va_list a_args) = 0; // 3A virtual MemoryContext* GetMemoryContext() const = 0; // 3B virtual ASStringManager* GetStringManager() const = 0; // 3C virtual Render::Text::Allocator* GetTextAllocator() = 0; // 3D virtual void BroadcastGeolocationStatusEvent(const EventId* a_id) = 0; // 3E // members MovieImpl* movieImpl; // 10 Ptr asSupport; // 18 std::uint8_t avmVersion; // 20 }; static_assert(sizeof(ASMovieRootBase) == 0x28); } }