diff --git a/.vscode/settings.json b/.vscode/settings.json index 8005d4a..467cf26 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,6 +5,7 @@ "*.c": "c", "*.scene": "yaml", "*.cene": "yaml", + "*.h": "cpp", "memory": "cpp", "array": "cpp", "atomic": "cpp", @@ -81,6 +82,7 @@ "any": "cpp", "ranges": "cpp", "unordered_set": "cpp", - "source_location": "cpp" + "source_location": "cpp", + "csignal": "cpp" } } \ No newline at end of file diff --git a/imgui.ini b/imgui.ini index 5d45201..aa329f9 100644 --- a/imgui.ini +++ b/imgui.ini @@ -10,24 +10,24 @@ Collapsed=1 [Window][WindowOverViewport_11111111] Pos=0,19 -Size=1920,1158 +Size=1280,701 Collapsed=0 [Window][Inspector] -Pos=1553,19 -Size=367,659 +Pos=913,19 +Size=367,202 Collapsed=0 DockId=0x00000018,0 [Window][Scene Tree] Pos=0,19 -Size=342,579 +Size=342,350 Collapsed=0 DockId=0x0000000F,0 [Window][Viewport] Pos=344,19 -Size=1207,659 +Size=567,202 Collapsed=0 DockId=0x00000017,0 @@ -36,14 +36,14 @@ Size=1280,19 Collapsed=0 [Window][Performance Info] -Pos=1606,680 -Size=314,497 +Pos=1094,223 +Size=186,497 Collapsed=0 DockId=0x00000016,0 [Window][Console] -Pos=344,680 -Size=1206,273 +Pos=344,223 +Size=715,273 Collapsed=0 DockId=0x00000013,0 @@ -54,8 +54,8 @@ Collapsed=0 DockId=0x00000017,1 [Window][Profiler] -Pos=344,955 -Size=1206,222 +Pos=344,498 +Size=715,222 Collapsed=0 DockId=0x00000014,0 @@ -112,8 +112,8 @@ Collapsed=0 DockId=0x0000000E,0 [Window][Audio Output] -Pos=1552,680 -Size=52,497 +Pos=1061,223 +Size=31,497 Collapsed=0 DockId=0x00000012,0 @@ -124,13 +124,13 @@ Collapsed=0 DockId=0x0000000D,0 [Window][Resources] -Pos=0,600 -Size=342,577 +Pos=0,371 +Size=342,349 Collapsed=0 DockId=0x00000010,0 [Docking][Data] -DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1920,1158 Split=X +DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1280,701 Split=X DockNode ID=0x00000005 Parent=0x11111111 SizeRef=989,1158 Split=X DockNode ID=0x00000001 Parent=0x00000005 SizeRef=342,701 Split=Y Selected=0x12EF0F59 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=342,637 Split=Y Selected=0x12EF0F59 diff --git a/remake/build.log b/remake/build.log index 88663c7..a5b5621 100644 --- a/remake/build.log +++ b/remake/build.log @@ -1,2 +1,3 @@ +[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -Isrc\vendor\imgui -IC:\msys64\mingw64\lib\libyaml-cpp.a -MMD -MP -c src\src\Engine.cpp -o src\build\Engine.o [LINK] g++ src\build\Engine.o src\build\main.o src\build\Renderer.o src\build\Components\AnimationComponent.o src\build\Components\AudioPlayerComponent.o src\build\Components\CameraComponent.o src\build\Components\LightComponent.o src\build\Components\ParticleComponent.o src\build\Components\PhysicsComponent.o src\build\Components\ScriptComponent.o src\build\Components\SpriteComponent.o src\build\Components\TextComonent.o src\build\Components\TilemapComponent.o src\build\core\audio\AudioEngine.o src\build\core\utils\AssetManager.o src\build\core\utils\EngineConfig.o src\build\core\utils\ExceptionHandler.o src\build\core\utils\FileDialog.o src\build\core\utils\input.o src\build\core\utils\LoadingWindow.o src\build\core\utils\Logging.o src\build\core\utils\Profiler.o src\build\core\utils\Texture.o src\build\core\utils\utils.o src\build\editor\windows\AssetBrowser.o src\build\editor\windows\AudioInfo.o src\build\editor\windows\Inspector.o src\build\Entitys\Object.o src\build\utils\GameObjectsList.o src\build\utils\Shader.o src\build\utils\UID.o src\build\lapi.o src\build\lauxlib.o src\build\lbaselib.o src\build\lcode.o src\build\lcorolib.o src\build\lctype.o src\build\ldblib.o src\build\ldebug.o src\build\ldo.o src\build\ldump.o src\build\lfunc.o src\build\lgc.o src\build\linit.o src\build\liolib.o src\build\llex.o src\build\lmathlib.o src\build\lmem.o src\build\loadlib.o src\build\lobject.o src\build\lopcodes.o src\build\loslib.o src\build\lparser.o src\build\lstate.o src\build\lstring.o src\build\lstrlib.o src\build\ltable.o src\build\ltablib.o src\build\ltm.o src\build\lua.o src\build\luac.o src\build\lundump.o src\build\lutf8lib.o src\build\lvm.o src\build\lzio.o src\build\imgui.o src\build\imgui_demo.o src\build\imgui_draw.o src\build\imgui_impl_glfw.o src\build\imgui_impl_opengl3.o src\build\imgui_tables.o src\build\imgui_widgets.o src\build\aabb.o src\build\arena_allocator.o src\build\array.o src\build\bitset.o src\build\body.o src\build\broad_phase.o src\build\constraint_graph.o src\build\contact.o src\build\contact_solver.o src\build\core.o src\build\distance.o src\build\distance_joint.o src\build\dynamic_tree.o src\build\geometry.o src\build\hull.o src\build\id_pool.o src\build\island.o src\build\joint.o src\build\manifold.o src\build\math_functions.o src\build\motor_joint.o src\build\mouse_joint.o src\build\mover.o src\build\prismatic_joint.o src\build\revolute_joint.o src\build\sensor.o src\build\shape.o src\build\solver.o src\build\solver_set.o src\build\table.o src\build\timer.o src\build\types.o src\build\weld_joint.o src\build\wheel_joint.o src\build\world.o src\build\xxhash.o src\build\miniaudio.o src\build\ImGuizmo.o -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto -ldbghelp [RUN] Executed app.exe successfully. diff --git a/src/src/Components/AnimationComponent.cpp b/src/src/Components/AnimationComponent.cpp index 2ff7a6d..540d076 100644 --- a/src/src/Components/AnimationComponent.cpp +++ b/src/src/Components/AnimationComponent.cpp @@ -130,6 +130,7 @@ std::string AnimationComponent::GetName() const { return "AnimationComponent"; } void AnimationComponent::Save(YAML::Emitter &out) const { + out << YAML::BeginMap; out << YAML::Key << "type" << YAML::Value << GetName(); out << YAML::Key << "TextureUAID" << YAML::Value << textureUAID; @@ -139,8 +140,8 @@ void AnimationComponent::Save(YAML::Emitter &out) const out << YAML::Key << "StartFrame" << YAML::Value << startFrame; out << YAML::Key << "EndFrame" << YAML::Value << endFrame; out << YAML::Key << "renderType" << YAML::Value << (renderType == RenderType::Lit ? "Lit" : "Unlit"); - out << YAML::EndMap; + } void AnimationComponent::Load(const YAML::Node &node) diff --git a/src/src/Engine.cpp b/src/src/Engine.cpp index 35a3df0..2cab45f 100644 --- a/src/src/Engine.cpp +++ b/src/src/Engine.cpp @@ -488,6 +488,8 @@ void DrawGizmoForObject(const std::shared_ptr& obj, const glm::mat4& vie void Engine::Init() { + SignalHandler::Init(this); + if (DeleteLatestLogFile()) { Logger::LogVerbose("Log file deleted"); @@ -1379,7 +1381,7 @@ void Engine::DrawObjectNode(const std::shared_ptr &obj) auto dragRef = obj; ImGui::SetDragDropPayload("OBJECT", &dragRef, sizeof(dragRef)); ImGui::Text("%s", obj->GetName().c_str()); - ImGui::EndDragDropSource(); + ImGui::EndDragDropSource() ; } if (ImGui::BeginDragDropTarget()) @@ -1694,6 +1696,7 @@ void Engine::Shutdown() glfwTerminate(); AudioEngine::Shutdown(); + AssetManager::ClearAllAssets(); std::filesystem::remove(tempScenePath); } diff --git a/src/src/Engine.h b/src/src/Engine.h index 0535f45..28ab813 100644 --- a/src/src/Engine.h +++ b/src/src/Engine.h @@ -21,9 +21,11 @@ public: void Run(); std::shared_ptr GetObjectByTag(const std::string &tag); + void Shutdown(); + + private: void Init(); - void Shutdown(); void DrawObjectNode(const std::shared_ptr &obj); void SaveScene(const std::string &path); void LoadScene(const std::string &path); diff --git a/src/src/Entitys/Object.h b/src/src/Entitys/Object.h index dd13929..9a70395 100644 --- a/src/src/Entitys/Object.h +++ b/src/src/Entitys/Object.h @@ -70,7 +70,7 @@ private: bool visable = true; std::string name; glm::vec2 localPosition{0.0f}; - float localRotationDeg = 0.0f; // Rotation in degrees + float localRotationDeg = 0.0f; Object *parent = nullptr; std::vector> children; std::vector> components; diff --git a/src/src/core/utils/ExceptionHandler.cpp b/src/src/core/utils/ExceptionHandler.cpp index 1b6675e..c28159b 100644 --- a/src/src/core/utils/ExceptionHandler.cpp +++ b/src/src/core/utils/ExceptionHandler.cpp @@ -1,31 +1,71 @@ #include "ExceptionHandler.h" #include "Logging.h" #include +#include +#include +#include + +#include "../../Engine.h" - -const char* Create::Exceptions::ExceptionToString(Create::Exceptions::Type type) { - switch (type) { - case Create::Exceptions::None: return "None"; - case Create::Exceptions::ComponentLoad: return "ComponentLoad"; - case Create::Exceptions::MissingField: return "MissingField"; - case Create::Exceptions::InvalidFormat: return "InvalidFormat"; - case Create::Exceptions::SystemFailure: return "SystemFailure"; - case Create::Exceptions::AssetMissing: return "AssetMissing"; - case Create::Exceptions::FileIO: return "FileIO"; - case Create::Exceptions::RuntimeLogic: return "RuntimeLogic"; - default: return "Unknown"; +const char *Create::Exceptions::ExceptionToString(Create::Exceptions::Type type) +{ + switch (type) + { + case Create::Exceptions::None: + return "None"; + case Create::Exceptions::ComponentLoad: + return "ComponentLoad"; + case Create::Exceptions::MissingField: + return "MissingField"; + case Create::Exceptions::InvalidFormat: + return "InvalidFormat"; + case Create::Exceptions::SystemFailure: + return "SystemFailure"; + case Create::Exceptions::AssetMissing: + return "AssetMissing"; + case Create::Exceptions::FileIO: + return "FileIO"; + case Create::Exceptions::RuntimeLogic: + return "RuntimeLogic"; + default: + return "Unknown"; } } -RecoverableError::RecoverableError(const std::string& msg, Create::Exceptions::Type type) +RecoverableError::RecoverableError(const std::string &msg, Create::Exceptions::Type type) : message(msg), type(type) {} -void RecoverableError::Handle() const { +void RecoverableError::Handle() const +{ Logger::LogWarning("[Recoverable][%s] %s", ExceptionToString(type), message.c_str()); } -FatalError::FatalError(const std::string& msg, Create::Exceptions::Type type) { +FatalError::FatalError(const std::string &msg, Create::Exceptions::Type type) +{ Logger::LogError("[Fatal][%s] %s", ExceptionToString(type), msg.c_str()); std::exit(1); } + + +std::atomic SignalHandler::interrupted{false}; +Engine* SignalHandler::engine = nullptr; + +void SignalHandler::Init(Engine* enginePtr) { + Logger::LogOk("Signal Core"); + engine = enginePtr; + std::signal(SIGINT, HandleSignal); +} + +bool SignalHandler::IsInterrupted() { + return interrupted; +} + +void SignalHandler::HandleSignal(int signal) { + if (signal == SIGINT) { + std::cout << "\n[Engine] Shutting down." << std::endl; + if (engine) + engine->Shutdown(); + interrupted = true; + } +} diff --git a/src/src/core/utils/ExceptionHandler.h b/src/src/core/utils/ExceptionHandler.h index f70fb13..dab701a 100644 --- a/src/src/core/utils/ExceptionHandler.h +++ b/src/src/core/utils/ExceptionHandler.h @@ -1,5 +1,6 @@ #pragma once #include +#include namespace Create::Exceptions { enum Type { @@ -30,3 +31,19 @@ class FatalError { public: FatalError(const std::string& msg, Create::Exceptions::Type type = Create::Exceptions::None); }; + + +class Engine; + +class SignalHandler { +public: + static void Init(Engine* enginePtr); + + static bool IsInterrupted(); + +private: + static std::atomic interrupted; + static Engine* engine; + + static void HandleSignal(int signal); +};