From cf8e4cad4d65cbdd5408f8c4b5d112922fd20a43 Mon Sep 17 00:00:00 2001 From: antopilo Date: Sat, 25 Jan 2025 17:09:58 -0500 Subject: [PATCH] Added onSceneLoaded delegate --- Editor/src/Windows/EditorInterface.cpp | 7 +++++++ Editor/src/Windows/EditorInterface.h | 2 ++ Nuake/Engine.cpp | 12 ++++++++++-- Nuake/Engine.h | 4 ++++ Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp | 6 +++++- Nuake/src/Rendering/Vulkan/SceneRenderPipeline.h | 7 +++++++ 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/Editor/src/Windows/EditorInterface.cpp b/Editor/src/Windows/EditorInterface.cpp index c9745c70..506a3b42 100644 --- a/Editor/src/Windows/EditorInterface.cpp +++ b/Editor/src/Windows/EditorInterface.cpp @@ -142,6 +142,8 @@ namespace Nuake { Window::Get()->SetTitlebarHitTestCallback([&](Window& window, int x, int y, bool& hit) { hit = m_TitleBarHovered; }); + + Engine::OnSceneLoaded.AddRaw(this, &EditorInterface::OnSceneLoaded); } void EditorInterface::DrawTitlebar(float& outHeight) @@ -2433,6 +2435,11 @@ namespace Nuake { window->DC.MenuBarAppending = false; } + void EditorInterface::OnSceneLoaded(Ref scene) + { + Logger::Log("On Scene loaded"); + } + bool isLoadingProject = false; bool isLoadingProjectQueue = false; bool EditorInterface::isCreatingNewProject = false; diff --git a/Editor/src/Windows/EditorInterface.h b/Editor/src/Windows/EditorInterface.h index 4cfa0ccc..f51bdd48 100644 --- a/Editor/src/Windows/EditorInterface.h +++ b/Editor/src/Windows/EditorInterface.h @@ -102,6 +102,8 @@ namespace Nuake bool BeginMenubar(const ImRect& barRectangle); void EndMenubar(); + void OnSceneLoaded(Ref scene); + void SetStatusMessage(const std::string& msg, const Color& color = Color(0.08f, 0.08f, 0.08f, 1.0f)) { m_StatusMessage = msg; m_StatusBarColor = color; } void DrawViewport(); void DrawStatusBar(); diff --git a/Nuake/Engine.cpp b/Nuake/Engine.cpp index 5a1cb935..6bb83d44 100644 --- a/Nuake/Engine.cpp +++ b/Nuake/Engine.cpp @@ -46,6 +46,8 @@ namespace Nuake Timestep Engine::timeStep = 0.f; float Engine::timeScale = 1.0f; + MulticastDelegate> Engine::OnSceneLoaded; + void Engine::Init() { //Window::Get()->OnWindowSetScene().AddStatic(&Engine::OnWindowSetScene); @@ -64,7 +66,7 @@ namespace Nuake currentWindow = Window::Get(); Input::Init(); - //Renderer2D::Init(); + Logger::Log("Engine initialized"); RegisterCoreTypes::RegisterCoreComponents(); @@ -250,7 +252,13 @@ namespace Nuake bool Engine::SetCurrentScene(Ref scene) { - return currentWindow->SetScene(scene); + bool result = currentWindow->SetScene(scene); + if (result) + { + OnSceneLoaded.Broadcast(scene); + } + + return result; } bool Engine::QueueSceneSwitch(const std::string& scenePath) diff --git a/Nuake/Engine.h b/Nuake/Engine.h index 83b91930..1d5a78a8 100644 --- a/Nuake/Engine.h +++ b/Nuake/Engine.h @@ -3,6 +3,7 @@ #include "src/Core/Core.h" #include "src/Core/Logger.h" #include "src/Window.h" +#include "src/Core/MulticastDelegate.h" // Welcome to the Nuake source code. namespace Nuake @@ -85,6 +86,9 @@ namespace Nuake static Timestep timeStep; static float timeScale; + public: + static MulticastDelegate> OnSceneLoaded; + private: static void GenerateManifest(); }; diff --git a/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp b/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp index 5aa6c3ab..0ed6286e 100644 --- a/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp +++ b/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp @@ -274,10 +274,14 @@ void SceneRenderPipeline::Render(PassRenderContext& ctx) { { GBufferAlbedo, GBufferDepth, GBufferNormal, GBufferMaterial }, // GBuffer { ShadingOutput }, // Shading - { TonemappedOutput } + { TonemappedOutput }, // Tonemap }; GBufferPipeline.Execute(ctx, pipelineInputs); + + // Debug drawing + // Get delegate + } Ref SceneRenderPipeline::ResizeImage(Ref image, const Vector2& size) diff --git a/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.h b/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.h index a67705dd..72e8a8b8 100644 --- a/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.h +++ b/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.h @@ -5,6 +5,8 @@ #include "src/Rendering/Vulkan/Pipeline/RenderPipeline.h" #include "src/Rendering/Vulkan/VkResources.h" +#include "src/Core/MulticastDelegate.h" + namespace Nuake { struct GBufferConstant @@ -95,6 +97,9 @@ namespace Nuake static RenderPipeline GBufferPipeline; + // Delegates + MulticastDelegate<> DebugDrawDelegate; + public: SceneRenderPipeline(); ~SceneRenderPipeline() = default; @@ -103,6 +108,8 @@ namespace Nuake void Render(PassRenderContext& ctx); Ref GetOutput() { return TonemappedOutput; } + MulticastDelegate<>& OnDebugDraw() { return DebugDrawDelegate; } + private: Ref ResizeImage(Ref image, const Vector2& size); };