#pragma once #include "BsScriptEditorPrerequisites.h" #include "BsScriptObject.h" #include "BsDragAndDropManager.h" namespace BansheeEngine { class ScriptSceneObjectDragDropData; class ScriptResourceDragDropData; class BS_SCR_BED_EXPORT ScriptDragDrop : public ScriptObject { public: SCRIPT_OBJ(EDITOR_ASSEMBLY, "BansheeEditor", "DragDrop"); private: ScriptDragDrop(MonoObject* instance); static void sceneObjectDragDropFinalize(bool processed); static void resourceDragDropFinalize(bool processed); static bool internal_IsDragInProgress(); static bool internal_IsDropInProgress(); static MonoObject* internal_GetData(); static void internal_StartSceneObjectDrag(ScriptSceneObjectDragDropData* dragData); static void internal_StartResourceDrag(ScriptResourceDragDropData* dragData); }; class BS_SCR_BED_EXPORT ScriptSceneObjectDragDropData : public ScriptObject { public: SCRIPT_OBJ(EDITOR_ASSEMBLY, "BansheeEditor", "SceneObjectDragDropData"); static MonoObject* create(const Vector& sceneObjects); const Vector& getSceneObjects() const { return mSceneObjects; } private: ScriptSceneObjectDragDropData(MonoObject* instance, const Vector& sceneObjects); static void internal_CreateInstance(MonoObject* instance, MonoArray* objects); static MonoArray* internal_GetObjects(ScriptSceneObjectDragDropData* instance); Vector mSceneObjects; }; class BS_SCR_BED_EXPORT ScriptResourceDragDropData : public ScriptObject < ScriptResourceDragDropData > { public: SCRIPT_OBJ(EDITOR_ASSEMBLY, "BansheeEditor", "ResourceDragDropData"); static MonoObject* create(const Vector& paths); const Vector& getPaths() const { return mPaths; } private: ScriptResourceDragDropData(MonoObject* instance, const Vector& paths); static void internal_CreateInstance(MonoObject* instance, MonoArray* paths); static MonoArray* internal_GetPaths(ScriptResourceDragDropData* instance); Vector mPaths; }; // Note: Must be equal to C# DragDropType enum enum class ScriptDragDropType { Resource, SceneObject, None }; class BS_SCR_BED_EXPORT ScriptDragDropManager : public Module { public: ScriptDragDropManager(); ~ScriptDragDropManager(); void update(); bool isDropInProgress() const { return mIsDropInProgress; } MonoObject* getDropData() const; private: void onMouseDragEnded(const PointerEvent& evt, DragCallbackInfo& callbackInfo); HEvent mDragEndedConn; bool mIsDropInProgress; UINT64 mDroppedFrameIdx; ScriptDragDropType mDropType; Vector mDroppedPaths; Vector mDroppedSceneObjects; }; }