From 87bc79d0a11471ee4d9f5670f61cd368328359cc Mon Sep 17 00:00:00 2001 From: "a.pilote" Date: Sun, 24 Jul 2022 18:12:29 -0400 Subject: [PATCH] Added play mode for engine .exe --- Editor/Editor.cpp | 126 +++++++++++++++++------- Nuake/ParticleEmitter.cpp | 6 ++ Nuake/ParticleEmitter.h | 14 +++ Nuake/src/Scene/Components/Components.h | 2 +- 4 files changed, 109 insertions(+), 39 deletions(-) create mode 100644 Nuake/ParticleEmitter.cpp create mode 100644 Nuake/ParticleEmitter.h diff --git a/Editor/Editor.cpp b/Editor/Editor.cpp index 2279bd49..e59be092 100644 --- a/Editor/Editor.cpp +++ b/Editor/Editor.cpp @@ -31,51 +31,101 @@ const std::string WindowTitle = "Nuake Editor"; -int main() +int main(int argc, char* argv[]) { - Nuake::Engine::Init(); - Nuake::EditorInterface editor; - editor.BuildFonts(); - - Ref window = Nuake::Engine::GetCurrentWindow(); - window->SetTitle(WindowTitle); - - using namespace Nuake; - - GizmoDrawer gizmoDrawer = GizmoDrawer(); - - while (!window->ShouldClose()) + bool playMode = false; + std::string projectPath = ""; + for (uint32_t i = 0; i < argc; i++) { - Nuake::Engine::Tick(); - Nuake::Engine::Draw(); + char* arg = argv[i]; + std::string args = std::string(arg); - Nuake::Vector2 WindowSize = window->GetSize(); - glViewport(0, 0, WindowSize.x, WindowSize.y); - Nuake::Renderer2D::BeginDraw(WindowSize); - - auto sceneFramebuffer = window->GetFrameBuffer(); - sceneFramebuffer->Bind(); + if (args == "--play") { - Ref currentScene = Nuake::Engine::GetCurrentScene(); - Ref camera; - if (currentScene) - { - camera = currentScene->m_EditorCamera; - } - - if (currentScene && !Nuake::Engine::IsPlayMode) - { - gizmoDrawer.DrawGizmos(currentScene); - } - - // + if (argc > 2) + { + projectPath = std::string(argv[i + 1]); + } + playMode = true; } - sceneFramebuffer->Unbind(); + } - editor.Draw(); + if (playMode) + { + Nuake::Engine::Init(); + Ref window = Nuake::Engine::GetCurrentWindow(); - // Swap buffers. - Nuake::Engine::EndDraw(); + Ref project = Nuake::Project::New(); + FileSystem::SetRootDirectory(projectPath + "/../"); + + project->FullPath = projectPath; + project->Deserialize(FileSystem::ReadFile(projectPath, true)); + + window->SetTitle(project->Name); + + Nuake::Engine::LoadProject(project); + + Nuake::Engine::EnterPlayMode(); + auto shader = Nuake::ShaderManager::GetShader("resources/Shaders/copy.shader"); + while (!window->ShouldClose()) + { + Nuake::Vector2 WindowSize = window->GetSize(); + glViewport(0, 0, WindowSize.x, WindowSize.y); + Nuake::Engine::Tick(); + Nuake::Engine::Draw(); + shader->Bind(); + + window->GetFrameBuffer()->GetTexture()->Bind(0); + shader->SetUniform1i("u_Source", 0); + Nuake::Renderer::DrawQuad(Nuake::Matrix4(1)); + + Nuake::Engine::EndDraw(); + } + } + else + { + Nuake::Engine::Init(); + Nuake::EditorInterface editor; + editor.BuildFonts(); + + Ref window = Nuake::Engine::GetCurrentWindow(); + window->SetTitle(WindowTitle); + + using namespace Nuake; + + GizmoDrawer gizmoDrawer = GizmoDrawer(); + + while (!window->ShouldClose()) + { + Nuake::Engine::Tick(); + Nuake::Engine::Draw(); + + Nuake::Vector2 WindowSize = window->GetSize(); + glViewport(0, 0, WindowSize.x, WindowSize.y); + Nuake::Renderer2D::BeginDraw(WindowSize); + + auto sceneFramebuffer = window->GetFrameBuffer(); + sceneFramebuffer->Bind(); + { + Ref currentScene = Nuake::Engine::GetCurrentScene(); + Ref camera; + if (currentScene) + { + camera = currentScene->m_EditorCamera; + } + + if (currentScene && !Nuake::Engine::IsPlayMode) + { + gizmoDrawer.DrawGizmos(currentScene); + } + } + sceneFramebuffer->Unbind(); + + editor.Draw(); + + // Swap buffers. + Nuake::Engine::EndDraw(); + } } Nuake::Engine::Close(); diff --git a/Nuake/ParticleEmitter.cpp b/Nuake/ParticleEmitter.cpp new file mode 100644 index 00000000..093ebf23 --- /dev/null +++ b/Nuake/ParticleEmitter.cpp @@ -0,0 +1,6 @@ +#include "ParticleEmitter.h" + +namespace Nuake +{ + +} \ No newline at end of file diff --git a/Nuake/ParticleEmitter.h b/Nuake/ParticleEmitter.h new file mode 100644 index 00000000..96cd68e3 --- /dev/null +++ b/Nuake/ParticleEmitter.h @@ -0,0 +1,14 @@ +#pragma once +#include "src/Resource/Serializable.h" + +namespace Nuake +{ + class ParticleEmitter + { + public: + + + json Serialize(); + bool Deserialize(const std::string& str); + }; +} \ No newline at end of file diff --git a/Nuake/src/Scene/Components/Components.h b/Nuake/src/Scene/Components/Components.h index 2a6da9a7..614f5c7d 100644 --- a/Nuake/src/Scene/Components/Components.h +++ b/Nuake/src/Scene/Components/Components.h @@ -16,5 +16,5 @@ #include "ParentComponent.h" #include "NameComponent.h" #include "BoxCollider.h" +#include "ParticleEmitter.h" #include "../Entities/Entity.h" -