From f3e0267623e7ec345edc32c188283dcbde4876c0 Mon Sep 17 00:00:00 2001 From: antopilo Date: Sat, 1 Mar 2025 12:27:18 -0500 Subject: [PATCH] Reusing the same code --- .../Source/Editor/Windows/EditorInterface.cpp | 8 +++--- .../SceneEditor/Widgets/ViewportWidget.cpp | 26 ++++++++++++------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/Editor/Source/Editor/Windows/EditorInterface.cpp b/Editor/Source/Editor/Windows/EditorInterface.cpp index 80807b56..87d4b7a7 100644 --- a/Editor/Source/Editor/Windows/EditorInterface.cpp +++ b/Editor/Source/Editor/Windows/EditorInterface.cpp @@ -2161,9 +2161,9 @@ namespace Nuake { void EditorInterface::OpenSceneWindow(Ref scene) { - Ref sceneEditor = CreateRef(scene); + auto sceneEditor = CreateRef(scene); sceneEditor->DockTo(SceneEditorDockspaceNodeID); - sceneEditors.push_back(sceneEditor); + sceneEditors.push_back(std::move(sceneEditor)); } void EditorInterface::OpenSceneWindow(const std::string& scenePath) @@ -2326,9 +2326,7 @@ namespace Nuake { { Ref newScene = Scene::New(); - Ref sceneEditor = CreateRef(newScene); - sceneEditor->DockTo(SceneEditorDockspaceNodeID); - sceneEditors.push_back(sceneEditor); + OpenSceneWindow(newScene); Selection = EditorSelection(); SetStatusMessage("New scene created."); diff --git a/Editor/Source/Editor/Windows/SceneEditor/Widgets/ViewportWidget.cpp b/Editor/Source/Editor/Windows/SceneEditor/Widgets/ViewportWidget.cpp index 49ab2f9c..344c9945 100644 --- a/Editor/Source/Editor/Windows/SceneEditor/Widgets/ViewportWidget.cpp +++ b/Editor/Source/Editor/Windows/SceneEditor/Widgets/ViewportWidget.cpp @@ -17,9 +17,8 @@ ViewportWidget::ViewportWidget(EditorContext& context) : IEditorWidget(context) const Vector2& defaultSize = { 1280, 720 }; const UUID viewId = editorContext.GetScene()->m_EditorCamera->ID; auto& vkRenderer = Nuake::VkRenderer::Get(); - auto viewport = vkRenderer.CreateViewport(viewId, defaultSize); - vkRenderer.RegisterSceneViewport(context.GetScene(), viewport->GetID()); - sceneViewport = viewport; + + OnSceneChanged(context.GetScene()); } ViewportWidget::~ViewportWidget() @@ -30,8 +29,12 @@ ViewportWidget::~ViewportWidget() void ViewportWidget::Update(float ts) { editorContext.GetScene()->Update(ts); - auto editorCam = (EditorCamera*)(editorContext.GetScene()->GetCurrentCamera().get()); - editorCam->Update(ts, isHoveringViewport); + + if (!Engine::IsPlayMode()) + { + Ref editorCam = editorContext.GetScene()->m_EditorCamera; + editorCam->Update(ts, isHoveringViewport); + } const Vector2 viewportSize = sceneViewport->GetViewportSize(); editorContext.GetScene()->GetCurrentCamera()->OnWindowResize(viewportSize.x, viewportSize.y); @@ -189,13 +192,18 @@ void ViewportWidget::OnSceneChanged(Ref scene) auto& vkRenderer = Nuake::VkRenderer::Get(); // Recreate new viewport with new scene with the same resolution - const Vector2 currentResolution = sceneViewport->GetViewportSize(); + Vector2 currentResolution = Vector2{ 1, 1 }; - // Remove old viewport - vkRenderer.RemoveViewport(sceneViewport->GetID()); + if (sceneViewport) + { + currentResolution = sceneViewport->GetViewportSize(); + + // Remove old viewport + vkRenderer.RemoveViewport(sceneViewport->GetID()); + } // Create new viewport with same reoslution - const UUID viewId = editorContext.GetScene()->GetCurrentCamera()->ID; + const UUID viewId = editorContext.GetScene()->m_EditorCamera->ID; auto viewport = vkRenderer.CreateViewport(viewId, currentResolution); vkRenderer.RegisterSceneViewport(scene, viewport->GetID());