Viewport now resets to the correct camera after changing scene
This commit is contained in:
@@ -121,6 +121,11 @@ bool SceneEditorWindow::IsFocused() const
|
||||
void SceneEditorWindow::SetScene(Ref<Scene> scene)
|
||||
{
|
||||
editorContext.SetScene(scene);
|
||||
|
||||
for (auto& widget : widgets)
|
||||
{
|
||||
widget->OnSceneChanged(scene);
|
||||
}
|
||||
}
|
||||
|
||||
Ref<Scene> SceneEditorWindow::GetScene() const
|
||||
|
||||
@@ -20,6 +20,8 @@ public:
|
||||
virtual void Update(float ts) = 0;
|
||||
virtual void Draw() = 0;
|
||||
|
||||
virtual void OnSceneChanged(Ref<Nuake::Scene> scene) {}
|
||||
|
||||
void DockTo(uint32_t dockId)
|
||||
{
|
||||
ImGui::DockBuilderDockWindow(widgetName.c_str(), dockId);
|
||||
|
||||
@@ -182,4 +182,22 @@ void ViewportWidget::Draw()
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
void ViewportWidget::OnSceneChanged(Ref<Nuake::Scene> scene)
|
||||
{
|
||||
auto& vkRenderer = Nuake::VkRenderer::Get();
|
||||
|
||||
// Recreate new viewport with new scene with the same resolution
|
||||
const Vector2 currentResolution = sceneViewport->GetViewportSize();
|
||||
|
||||
// Remove old viewport
|
||||
vkRenderer.RemoveViewport(sceneViewport->GetID());
|
||||
|
||||
// Create new viewport with same reoslution
|
||||
const UUID viewId = editorContext.GetScene()->m_EditorCamera->ID;
|
||||
auto viewport = vkRenderer.CreateViewport(viewId, currentResolution);
|
||||
vkRenderer.RegisterSceneViewport(scene, viewport->GetID());
|
||||
|
||||
sceneViewport = viewport;
|
||||
}
|
||||
@@ -29,4 +29,5 @@ public:
|
||||
public:
|
||||
void Update(float ts) override;
|
||||
void Draw() override;
|
||||
void OnSceneChanged(Ref<Nuake::Scene> scene) override;
|
||||
};
|
||||
Reference in New Issue
Block a user