updated shutdown systems, and added interrupt handler

This commit is contained in:
OusmBlueNinja 2025-05-06 13:05:21 -05:00
parent 7a45cd57e4
commit 3ad50932b6
9 changed files with 102 additions and 36 deletions

View File

@ -5,6 +5,7 @@
"*.c": "c", "*.c": "c",
"*.scene": "yaml", "*.scene": "yaml",
"*.cene": "yaml", "*.cene": "yaml",
"*.h": "cpp",
"memory": "cpp", "memory": "cpp",
"array": "cpp", "array": "cpp",
"atomic": "cpp", "atomic": "cpp",
@ -81,6 +82,7 @@
"any": "cpp", "any": "cpp",
"ranges": "cpp", "ranges": "cpp",
"unordered_set": "cpp", "unordered_set": "cpp",
"source_location": "cpp" "source_location": "cpp",
"csignal": "cpp"
} }
} }

View File

@ -10,24 +10,24 @@ Collapsed=1
[Window][WindowOverViewport_11111111] [Window][WindowOverViewport_11111111]
Pos=0,19 Pos=0,19
Size=1920,1158 Size=1280,701
Collapsed=0 Collapsed=0
[Window][Inspector] [Window][Inspector]
Pos=1553,19 Pos=913,19
Size=367,659 Size=367,202
Collapsed=0 Collapsed=0
DockId=0x00000018,0 DockId=0x00000018,0
[Window][Scene Tree] [Window][Scene Tree]
Pos=0,19 Pos=0,19
Size=342,579 Size=342,350
Collapsed=0 Collapsed=0
DockId=0x0000000F,0 DockId=0x0000000F,0
[Window][Viewport] [Window][Viewport]
Pos=344,19 Pos=344,19
Size=1207,659 Size=567,202
Collapsed=0 Collapsed=0
DockId=0x00000017,0 DockId=0x00000017,0
@ -36,14 +36,14 @@ Size=1280,19
Collapsed=0 Collapsed=0
[Window][Performance Info] [Window][Performance Info]
Pos=1606,680 Pos=1094,223
Size=314,497 Size=186,497
Collapsed=0 Collapsed=0
DockId=0x00000016,0 DockId=0x00000016,0
[Window][Console] [Window][Console]
Pos=344,680 Pos=344,223
Size=1206,273 Size=715,273
Collapsed=0 Collapsed=0
DockId=0x00000013,0 DockId=0x00000013,0
@ -54,8 +54,8 @@ Collapsed=0
DockId=0x00000017,1 DockId=0x00000017,1
[Window][Profiler] [Window][Profiler]
Pos=344,955 Pos=344,498
Size=1206,222 Size=715,222
Collapsed=0 Collapsed=0
DockId=0x00000014,0 DockId=0x00000014,0
@ -112,8 +112,8 @@ Collapsed=0
DockId=0x0000000E,0 DockId=0x0000000E,0
[Window][Audio Output] [Window][Audio Output]
Pos=1552,680 Pos=1061,223
Size=52,497 Size=31,497
Collapsed=0 Collapsed=0
DockId=0x00000012,0 DockId=0x00000012,0
@ -124,13 +124,13 @@ Collapsed=0
DockId=0x0000000D,0 DockId=0x0000000D,0
[Window][Resources] [Window][Resources]
Pos=0,600 Pos=0,371
Size=342,577 Size=342,349
Collapsed=0 Collapsed=0
DockId=0x00000010,0 DockId=0x00000010,0
[Docking][Data] [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=0x00000005 Parent=0x11111111 SizeRef=989,1158 Split=X
DockNode ID=0x00000001 Parent=0x00000005 SizeRef=342,701 Split=Y Selected=0x12EF0F59 DockNode ID=0x00000001 Parent=0x00000005 SizeRef=342,701 Split=Y Selected=0x12EF0F59
DockNode ID=0x00000003 Parent=0x00000001 SizeRef=342,637 Split=Y Selected=0x12EF0F59 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=342,637 Split=Y Selected=0x12EF0F59

View File

@ -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 [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. [RUN] Executed app.exe successfully.

View File

@ -130,6 +130,7 @@ std::string AnimationComponent::GetName() const { return "AnimationComponent"; }
void AnimationComponent::Save(YAML::Emitter &out) const void AnimationComponent::Save(YAML::Emitter &out) const
{ {
out << YAML::BeginMap; out << YAML::BeginMap;
out << YAML::Key << "type" << YAML::Value << GetName(); out << YAML::Key << "type" << YAML::Value << GetName();
out << YAML::Key << "TextureUAID" << YAML::Value << textureUAID; 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 << "StartFrame" << YAML::Value << startFrame;
out << YAML::Key << "EndFrame" << YAML::Value << endFrame; out << YAML::Key << "EndFrame" << YAML::Value << endFrame;
out << YAML::Key << "renderType" << YAML::Value << (renderType == RenderType::Lit ? "Lit" : "Unlit"); out << YAML::Key << "renderType" << YAML::Value << (renderType == RenderType::Lit ? "Lit" : "Unlit");
out << YAML::EndMap; out << YAML::EndMap;
} }
void AnimationComponent::Load(const YAML::Node &node) void AnimationComponent::Load(const YAML::Node &node)

View File

@ -488,6 +488,8 @@ void DrawGizmoForObject(const std::shared_ptr<Object>& obj, const glm::mat4& vie
void Engine::Init() void Engine::Init()
{ {
SignalHandler::Init(this);
if (DeleteLatestLogFile()) if (DeleteLatestLogFile())
{ {
Logger::LogVerbose("Log file deleted"); Logger::LogVerbose("Log file deleted");
@ -1694,6 +1696,7 @@ void Engine::Shutdown()
glfwTerminate(); glfwTerminate();
AudioEngine::Shutdown(); AudioEngine::Shutdown();
AssetManager::ClearAllAssets();
std::filesystem::remove(tempScenePath); std::filesystem::remove(tempScenePath);
} }

View File

@ -21,9 +21,11 @@ public:
void Run(); void Run();
std::shared_ptr<Object> GetObjectByTag(const std::string &tag); std::shared_ptr<Object> GetObjectByTag(const std::string &tag);
void Shutdown();
private: private:
void Init(); void Init();
void Shutdown();
void DrawObjectNode(const std::shared_ptr<Object> &obj); void DrawObjectNode(const std::shared_ptr<Object> &obj);
void SaveScene(const std::string &path); void SaveScene(const std::string &path);
void LoadScene(const std::string &path); void LoadScene(const std::string &path);

View File

@ -70,7 +70,7 @@ private:
bool visable = true; bool visable = true;
std::string name; std::string name;
glm::vec2 localPosition{0.0f}; glm::vec2 localPosition{0.0f};
float localRotationDeg = 0.0f; // Rotation in degrees float localRotationDeg = 0.0f;
Object *parent = nullptr; Object *parent = nullptr;
std::vector<std::shared_ptr<Object>> children; std::vector<std::shared_ptr<Object>> children;
std::vector<std::shared_ptr<Component>> components; std::vector<std::shared_ptr<Component>> components;

View File

@ -1,31 +1,71 @@
#include "ExceptionHandler.h" #include "ExceptionHandler.h"
#include "Logging.h" #include "Logging.h"
#include <cstdlib> #include <cstdlib>
#include <atomic>
#include <csignal>
#include <iostream>
#include "../../Engine.h"
const char *Create::Exceptions::ExceptionToString(Create::Exceptions::Type type)
const char* Create::Exceptions::ExceptionToString(Create::Exceptions::Type type) { {
switch (type) { switch (type)
case Create::Exceptions::None: return "None"; {
case Create::Exceptions::ComponentLoad: return "ComponentLoad"; case Create::Exceptions::None:
case Create::Exceptions::MissingField: return "MissingField"; return "None";
case Create::Exceptions::InvalidFormat: return "InvalidFormat"; case Create::Exceptions::ComponentLoad:
case Create::Exceptions::SystemFailure: return "SystemFailure"; return "ComponentLoad";
case Create::Exceptions::AssetMissing: return "AssetMissing"; case Create::Exceptions::MissingField:
case Create::Exceptions::FileIO: return "FileIO"; return "MissingField";
case Create::Exceptions::RuntimeLogic: return "RuntimeLogic"; case Create::Exceptions::InvalidFormat:
default: return "Unknown"; 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) {} : message(msg), type(type) {}
void RecoverableError::Handle() const { void RecoverableError::Handle() const
{
Logger::LogWarning("[Recoverable][%s] %s", ExceptionToString(type), message.c_str()); 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()); Logger::LogError("[Fatal][%s] %s", ExceptionToString(type), msg.c_str());
std::exit(1); std::exit(1);
} }
std::atomic<bool> 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;
}
}

View File

@ -1,5 +1,6 @@
#pragma once #pragma once
#include <string> #include <string>
#include <atomic>
namespace Create::Exceptions { namespace Create::Exceptions {
enum Type { enum Type {
@ -30,3 +31,19 @@ class FatalError {
public: public:
FatalError(const std::string& msg, Create::Exceptions::Type type = Create::Exceptions::None); 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<bool> interrupted;
static Engine* engine;
static void HandleSignal(int signal);
};