From 50d7ad80a2563a0058bfb6d1e65465a2f550ea42 Mon Sep 17 00:00:00 2001 From: SHAM-DP Date: Mon, 27 Feb 2023 22:02:48 +0800 Subject: [PATCH 1/6] Added Spatial Audio --- .../src/AudioSystem/SHAudioSystem.cpp | 60 +++++++++++++++---- SHADE_Engine/src/AudioSystem/SHAudioSystem.h | 2 +- SHADE_Engine/src/Common/SHAllComponents.h | 3 +- .../Inspector/SHEditorInspector.cpp | 9 ++- .../src/Serialization/SHSerialization.cpp | 3 + 5 files changed, 60 insertions(+), 17 deletions(-) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index a7245123..e5e062a2 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -16,6 +16,7 @@ #include #include #include +#include "Camera/SHCameraSystem.h" const std::string AUDIO_FOLDER_PATH{ std::string(ASSET_ROOT)+ "/Audio/" }; @@ -53,8 +54,9 @@ namespace SHADE denseListener = &SHComponentManager::GetDense(); fmodStudioSystem->getCoreSystem(&fmodSystem); - - result = fmodStudioSystem->initialize(AUDIO_SYS_MAX_CHANNELS, AUDIO_SYS_MAX_CHANNELS, FMOD_STUDIO_INIT_NORMAL, extraDriverData); + fmodSystem->setSoftwareFormat(0, FMOD_SPEAKERMODE_5POINT1, 0); + result = fmodStudioSystem->initialize(AUDIO_SYS_MAX_CHANNELS, AUDIO_SYS_MAX_CHANNELS, FMOD_STUDIO_INIT_NORMAL | FMOD_INIT_NORMAL, extraDriverData); + ErrorCheck(); fmodSystem->setSoftwareFormat(0, speakerMode, 0); @@ -119,18 +121,44 @@ namespace SHADE // PlayEventOnce("event:/Characters/sfx_footsteps_raccoon"); fmodStudioSystem->update(); - if (!denseListener->empty()) + //int listenerID = 0; + //for(auto& listener : *denseListener) + //{ + // if(!listener.isActive) + // continue; + // //SHAudioListenerComponent& listener = denseListener->at(0); //Loop through dense + // SHTransformComponent* listenerTransform = SHComponentManager::GetComponent_s(listener.GetEID()); + // if (listenerTransform) + // { + // listener.SetPos(listenerTransform->GetWorldPosition()); + // SHQuaternion worldOrientation = listenerTransform->GetWorldOrientation(); + // SHVec3 orientatedFoward = (worldOrientation * SHQuaternion::FromEuler(SHVec3::Forward) * SHQuaternion::Conjugate(worldOrientation)).ToEuler(); + // SHVec3 orientatedUp = (worldOrientation * SHQuaternion::FromEuler(SHVec3::Up) * SHQuaternion::Conjugate(worldOrientation)).ToEuler(); + // listener.SetForward(orientatedFoward); + // listener.SetUp(orientatedUp); + + // FMOD_3D_ATTRIBUTES attribs{ { 0 } }; + // attribs.position = { listener.pos.x, listener.pos.y, listener.pos.z }; + // attribs.forward = { orientatedFoward.x, orientatedFoward.y, orientatedFoward.z }; + // attribs.up = { orientatedUp.x, orientatedUp.y, orientatedUp.z }; + // + // fmodStudioSystem->setListenerAttributes(listenerID++, &attribs); + // } + //} + + if(auto camSystem = SHSystemManager::GetSystem()) { - SHAudioListenerComponent& listener = denseListener->at(0); - SHTransformComponent* listenerTransform = SHComponentManager::GetComponent_s(listener.GetEID()); - if (listenerTransform) + auto mainCamEID = camSystem->GetMainCameraEID(); + if(auto camComponent = SHComponentManager::GetComponent_s(mainCamEID)) { - listener.SetPos(listenerTransform->GetWorldPosition()); // TODO: Clean up listener - listener.SetForward({ (listenerTransform->GetLocalScale()[0] > 0.f) ? 1.f : -1.f, 0.f, 0.f }); //TODO: USE CORRECT FORWARD - FMOD_VECTOR pos = { listener.pos[0] ,listener.pos[1] ,0.f }; - FMOD_VECTOR forward = { listener.forward[0] ,listener.forward[1] ,listener.forward[2] }; - FMOD_VECTOR up = { listener.up[0] ,listener.up[1] ,listener.up[2] }; - fmodSystem->set3DListenerAttributes(0, &pos, nullptr, &forward, &up); + FMOD_3D_ATTRIBUTES attribs{ { 0 } }; + SHVec3 pos = camComponent->GetPosition(); + SHVec3 forward, up, right; + camSystem->GetCameraAxis(*camComponent, forward, right, up); + attribs.position = { pos.x, pos.y, pos.z }; + attribs.forward = { forward.x, forward.y, forward.z }; + attribs.up = { up.x, up.y, up.z }; + fmodStudioSystem->setListenerAttributes(0, &attribs); } } @@ -141,9 +169,15 @@ namespace SHADE { if(SHTransformComponent* transformComponent = SHComponentManager::GetComponent_s(it->transformRef)) { - FMOD_3D_ATTRIBUTES attribs{}; //TODO: Set other attribs + FMOD_3D_ATTRIBUTES attribs{ { 0 } }; //TODO: Set other attribs auto pos = transformComponent->GetWorldPosition(); + SHQuaternion worldOrientation = transformComponent->GetWorldOrientation(); + SHVec3 orientatedFoward = (worldOrientation * SHQuaternion::FromEuler(SHVec3::Forward) * SHQuaternion::Conjugate(worldOrientation)).ToEuler(); + SHVec3 orientatedUp = (worldOrientation * SHQuaternion::FromEuler(SHVec3::Up) * SHQuaternion::Conjugate(worldOrientation)).ToEuler(); + attribs.position = {pos.x, pos.y, pos.z}; + attribs.forward = {orientatedFoward.x, orientatedFoward.y, orientatedFoward.z}; + attribs.up = {orientatedUp.x, orientatedUp.y, orientatedUp.z}; it->instance->set3DAttributes(&attribs); } } diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h index 5714a618..68942a8e 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h @@ -22,7 +22,7 @@ namespace SHADE typedef FMOD::Studio::Bank* SHBank; class SHAudioListenerComponent; - + class SH_API AudioClip { public: diff --git a/SHADE_Engine/src/Common/SHAllComponents.h b/SHADE_Engine/src/Common/SHAllComponents.h index 9d280677..36b74853 100644 --- a/SHADE_Engine/src/Common/SHAllComponents.h +++ b/SHADE_Engine/src/Common/SHAllComponents.h @@ -12,4 +12,5 @@ #include "Graphics/MiddleEnd/Lights/SHLightComponent.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Physics/Interface/SHColliderComponent.h" -#include "Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.h" \ No newline at end of file +#include "Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.h" +#include "AudioSystem/SHAudioListenerComponent.h" \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index 391e0be2..c95221ec 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -171,10 +171,15 @@ namespace SHADE if (auto toggleButton = SHComponentManager::GetComponent_s(eid)) { DrawComponent(toggleButton); - }if (auto slider = SHComponentManager::GetComponent_s(eid)) + } + if (auto slider = SHComponentManager::GetComponent_s(eid)) { DrawComponent(slider); } + if(auto listenerComponent = SHComponentManager::GetComponent_s(eid)) + { + DrawComponent(listenerComponent); + } ImGui::Separator(); // Render Scripts SHScriptEngine* scriptEngine = static_cast(SHSystemManager::GetSystem()); @@ -198,7 +203,7 @@ namespace SHADE DrawAddComponentWithEnforcedComponentButton(eid); DrawAddComponentWithEnforcedComponentButton(eid); DrawAddComponentWithEnforcedComponentButton(eid); - + DrawAddComponentWithEnforcedComponentButton(eid); ImGui::EndMenu(); } diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index 29fb8cd7..13f5e36e 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -246,6 +246,7 @@ namespace SHADE AddComponentToComponentNode(components, eid); AddComponentToComponentNode(components, eid); AddComponentToComponentNode(components, eid); + AddComponentToComponentNode(components, eid); node[ComponentsNode] = components; @@ -306,6 +307,7 @@ namespace SHADE AddComponentID(componentIDList, componentsNode); AddComponentID(componentIDList, componentsNode); AddComponentID(componentIDList, componentsNode); + AddComponentID(componentIDList, componentsNode); return componentIDList; } @@ -392,5 +394,6 @@ namespace SHADE SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); + SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); } } From 417f086dfaff863a2c55ee41c4635af9b0147b51 Mon Sep 17 00:00:00 2001 From: SHAM-DP Date: Tue, 28 Feb 2023 09:36:28 +0800 Subject: [PATCH 2/6] Clean up and verified VCA Volume editing is working fine --- SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index e5e062a2..99c0c9a1 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -91,11 +91,6 @@ namespace SHADE LoadBank((AUDIO_FOLDER_PATH + "SFX.bank").data()); LoadBank((AUDIO_FOLDER_PATH + "UI.bank").data()); - //auto clip = CreateAudioClip("event:/Characters/sfx_footsteps_human"); - //clip->Play(); - //PlayEventOnce("event:/Characters/sfx_footsteps_raccoon"); - //PlayEventOnce("event:/SFX/Dawn/Dawn_Attack"); - #ifdef SHEDITOR // Subscribe to Editor State Change Events @@ -163,13 +158,13 @@ namespace SHADE } auto [begin, end] = audioClipLibrary.GetDenseAccess(); - for(auto it = begin; it != end; ++it) + for (auto& it = begin; it != end; ++it) { if(it->instance && (it->transformRef != MAX_EID)) { if(SHTransformComponent* transformComponent = SHComponentManager::GetComponent_s(it->transformRef)) { - FMOD_3D_ATTRIBUTES attribs{ { 0 } }; //TODO: Set other attribs + FMOD_3D_ATTRIBUTES attribs{ { 0 } }; auto pos = transformComponent->GetWorldPosition(); SHQuaternion worldOrientation = transformComponent->GetWorldOrientation(); SHVec3 orientatedFoward = (worldOrientation * SHQuaternion::FromEuler(SHVec3::Forward) * SHQuaternion::Conjugate(worldOrientation)).ToEuler(); From a6659f7cbc4d54291039fb270f8645d936bef3c0 Mon Sep 17 00:00:00 2001 From: SHAM-DP Date: Tue, 28 Feb 2023 13:11:21 +0800 Subject: [PATCH 3/6] Remove some redundant lines --- SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index 99c0c9a1..e02eac50 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -85,8 +85,6 @@ namespace SHADE LoadBank((AUDIO_FOLDER_PATH + "Master.bank").data()); LoadBank((AUDIO_FOLDER_PATH + "Master.strings.bank").data()); - //LoadBank((AUDIO_FOLDER_PATH + "Music.bank").data()); - //LoadBank((AUDIO_FOLDER_PATH + "footsteps.bank").data()); LoadBank((AUDIO_FOLDER_PATH + "Music.bank").data()); LoadBank((AUDIO_FOLDER_PATH + "SFX.bank").data()); LoadBank((AUDIO_FOLDER_PATH + "UI.bank").data()); @@ -112,8 +110,6 @@ namespace SHADE void SHADE::SHAudioSystem::Run(double dt) { static_cast(dt); - //if (GetKeyState(VK_SPACE) & 0x8000) - // PlayEventOnce("event:/Characters/sfx_footsteps_raccoon"); fmodStudioSystem->update(); //int listenerID = 0; From e75826436fcc74c4873ebbba48449a10d8f0ec04 Mon Sep 17 00:00:00 2001 From: SHAM-DP Date: Tue, 28 Feb 2023 15:12:17 +0800 Subject: [PATCH 4/6] Fix editor config working scene, fix entities being copy/pasted when using copy paste in a field. Fix filtered display for asset browser --- Assets/Editor/Editor.SHConfig | 4 --- .../AssetBrowser/SHAssetBrowser.cpp | 25 +++++++++++++++---- .../AssetBrowser/SHAssetBrowser.h | 2 +- .../HierarchyPanel/SHHierarchyPanel.cpp | 2 +- SHADE_Engine/src/Editor/SHEditor.cpp | 6 ++++- SHADE_Engine/src/Editor/SHEditor.h | 2 +- 6 files changed, 28 insertions(+), 13 deletions(-) delete mode 100644 Assets/Editor/Editor.SHConfig diff --git a/Assets/Editor/Editor.SHConfig b/Assets/Editor/Editor.SHConfig deleted file mode 100644 index 37edf50c..00000000 --- a/Assets/Editor/Editor.SHConfig +++ /dev/null @@ -1,4 +0,0 @@ -Start Maximized: true -Working Scene ID: 97158628 -Window Size: {x: 1920, y: 1013} -Style: 0 \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp index dce3ffbd..0b6db700 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -254,7 +254,7 @@ namespace SHADE return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); } - ImRect SHAssetBrowser::DrawAsset(SHAsset const* const asset, FileExt const& ext /*= ""*/) noexcept + ImRect SHAssetBrowser::DrawAsset(SHAsset const* const asset, FileExt const& ext /*= ""*/, bool isSubAsset /*= false*/) noexcept { if (asset == nullptr) return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); @@ -267,10 +267,20 @@ namespace SHADE bool highlighted = false; if(!filter.empty()) { - ImGui::SetNextItemOpen(true); + //ImGui::SetNextItemOpen(true); if(SHStringUtilities::StringFindInsensitive(asset->name.data(), filter) == std::string::npos) { - return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); + bool subAssetFiltered = false; + for (auto const& subAsset : asset->subAssets) + { + subAssetFiltered |= (SHStringUtilities::StringFindInsensitive(subAsset->name.data(), filter) != std::string::npos); + } + if(!subAssetFiltered) + return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); + else if(!asset->subAssets.empty()) + { + ImGui::SetNextItemOpen(true); + } } else { @@ -350,7 +360,12 @@ namespace SHADE case AssetType::TEXTURE: break; case AssetType::MESH: break; case AssetType::SCENE: - editor->LoadScene(asset->id); + { + if(editor->LoadScene(asset->id)) + { + editor->editorConfig->workingSceneID = asset->id; + } + } break; case AssetType::PREFAB: break; case AssetType::MATERIAL: @@ -418,7 +433,7 @@ namespace SHADE for(auto const& subAsset : asset->subAssets) { const float horizontalLineSize = 25.0f; - const ImRect childRect = DrawAsset(subAsset); + const ImRect childRect = DrawAsset(subAsset, "", true); const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); vertLineEnd.y = midPoint; diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h index 0ff5225e..48050684 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h @@ -24,7 +24,7 @@ namespace SHADE ImRect RecursivelyDrawTree(FolderPointer folder); void DrawCurrentFolder(); ImRect DrawFile(SHFile& file) noexcept; - ImRect DrawAsset(SHAsset const* const asset, FileExt const& ext = "") noexcept; + ImRect DrawAsset(SHAsset const* const asset, FileExt const& ext = "", bool isSubAsset = false) noexcept; void DrawAssetBeingCreated() noexcept; void DrawAssetBrowserFilter(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index cb7e3b12..f18e1cbd 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -99,7 +99,7 @@ namespace SHADE } ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal); - if (!ImGui::IsAnyItemFocused()) + if (!ImGui::IsAnyItemActive()) { if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_A)) { diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index d151fd64..bc238b96 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -579,19 +579,23 @@ namespace SHADE return false; } - void SHEditor::LoadScene(AssetID const& assetID) noexcept + bool SHEditor::LoadScene(AssetID const& assetID) noexcept { if(shWindow->IsUnsavedChanges()) { //Unsaved changes prompt isUnsavedChangesPromptOpen = true; sceneToLoad = assetID; + return false; } else { //Load the scene sceneToLoad = 0; + editorConfig->workingSceneID = assetID; + SHConfigurationManager::SaveEditorConfig(); SHSceneManager::RestartScene(assetID); + return true; } } diff --git a/SHADE_Engine/src/Editor/SHEditor.h b/SHADE_Engine/src/Editor/SHEditor.h index 58ac6e26..1cbc4f9d 100644 --- a/SHADE_Engine/src/Editor/SHEditor.h +++ b/SHADE_Engine/src/Editor/SHEditor.h @@ -115,7 +115,7 @@ namespace SHADE bool SaveScene(std::string const& newSceneName = {}); - void LoadScene(AssetID const& assetID) noexcept; + bool LoadScene(AssetID const& assetID) noexcept; void Play(); void Pause(); From 7e34edecdd5d5ea0c87644e79ca46bf712464842 Mon Sep 17 00:00:00 2001 From: SHAM-DP Date: Tue, 28 Feb 2023 15:36:45 +0800 Subject: [PATCH 5/6] safety check for scroll to after paste entity --- .../EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.cpp index 78545829..7bc19443 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.cpp @@ -49,7 +49,8 @@ namespace SHADE data.createdEntities.clear(); data.createdEntities = SHSerialization::DeserializeEntitiesFromString(data.entityData, data.parentEID); data.entityData = SHSerialization::ResolveSerializedEntityIndices(data.entityData, data.createdEntities); - SHEditorWindowManager::GetEditorWindow()->SetScrollTo(data.createdEntities.begin()->second); + if(!data.createdEntities.empty()) + SHEditorWindowManager::GetEditorWindow()->SetScrollTo(data.createdEntities.begin()->second); } void SHPasteEntitiesCommand::Undo() From ef268bc9e5107b99c23468005d6629917471f876 Mon Sep 17 00:00:00 2001 From: SHAM-DP Date: Tue, 28 Feb 2023 16:01:52 +0800 Subject: [PATCH 6/6] Drag drop prefab onto entity (NON UNDO/REDO ACTION for now) --- .../HierarchyPanel/SHHierarchyPanel.cpp | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index f18e1cbd..8cc41d56 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -29,6 +29,8 @@ #include "Serialization/Prefab/SHPrefabManager.h" #include "../SHEditorWindowManager.h" #include "../AssetBrowser/SHAssetBrowser.h" +#include "Assets/SHAssetManager.h" +#include "Assets/Asset Types/SHPrefabAsset.h" namespace SHADE @@ -136,6 +138,23 @@ namespace SHADE draggingEntities.clear(); ImGui::ClearDragDrop(); } + //else if(SHDragDrop::currentDragDropTag == SHDragDrop::DRAG_RESOURCE) + //{ + // if (const AssetID* assetPayload = SHDragDrop::AcceptPayload(SHDragDrop::DRAG_RESOURCE)) //If payload is valid + // { + // auto assetId = *assetPayload; + // auto createdEntitiesList = SHSerialization::DeserializeEntitiesFromString(SHAssetManager::GetData(assetId)->data); + // if (!createdEntitiesList.empty()) + // { + // std::vector eidList; + // std::ranges::transform(createdEntitiesList, std::back_inserter(eidList), [](std::pair pair) {return pair.second; }); + // ParentSelectedEntities(eid, eidList); + // SetScrollTo(createdEntitiesList.begin()->second); + // SHPrefabManager::AddEntity(assetId, createdEntitiesList.begin()->second); + // skipFrame = true; + // } + // } + //} } } ImGui::End(); @@ -359,6 +378,20 @@ namespace SHADE draggingEntities.clear(); //ImGui::ClearDragDrop(); } + if (const AssetID* assetPayload = SHDragDrop::AcceptPayload(SHDragDrop::DRAG_RESOURCE)) //If payload is valid + { + auto assetId = *assetPayload; + auto createdEntitiesList = SHSerialization::DeserializeEntitiesFromString(SHAssetManager::GetData(assetId)->data); + if(!createdEntitiesList.empty()) + { + std::vector eidList; + std::ranges::transform(createdEntitiesList, std::back_inserter(eidList), [](std::pair pair){return pair.second;} ); + ParentSelectedEntities(eid, eidList); + SetScrollTo(createdEntitiesList.begin()->second); + SHPrefabManager::AddEntity(assetId, createdEntitiesList.begin()->second); + skipFrame = true; + } + } SHDragDrop::EndTarget(); }