Made a Simple scene manager with loading and saving
This commit is contained in:
parent
e8b43ae843
commit
d204e68cf3
26
imgui.ini
26
imgui.ini
@ -1,6 +1,6 @@
|
|||||||
[Window][DockSpace]
|
[Window][DockSpace]
|
||||||
Pos=0,0
|
Pos=0,0
|
||||||
Size=1920,1177
|
Size=1280,720
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
|
|
||||||
[Window][Debug##Default]
|
[Window][Debug##Default]
|
||||||
@ -9,26 +9,26 @@ Size=400,400
|
|||||||
Collapsed=0
|
Collapsed=0
|
||||||
|
|
||||||
[Window][Inspector]
|
[Window][Inspector]
|
||||||
Pos=1588,27
|
Pos=948,27
|
||||||
Size=324,587
|
Size=324,352
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000005,0
|
DockId=0x00000005,0
|
||||||
|
|
||||||
[Window][OpenGL Output]
|
[Window][OpenGL Output]
|
||||||
Pos=375,27
|
Pos=374,27
|
||||||
Size=1211,770
|
Size=572,313
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000003,0
|
DockId=0x00000003,0
|
||||||
|
|
||||||
[Window][Performance]
|
[Window][Performance]
|
||||||
Pos=1588,616
|
Pos=948,381
|
||||||
Size=324,553
|
Size=324,331
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000006,0
|
DockId=0x00000006,0
|
||||||
|
|
||||||
[Window][Logger]
|
[Window][Logger]
|
||||||
Pos=375,799
|
Pos=374,342
|
||||||
Size=1211,370
|
Size=572,370
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000004,0
|
DockId=0x00000004,0
|
||||||
|
|
||||||
@ -40,14 +40,14 @@ DockId=0x00000007,0
|
|||||||
|
|
||||||
[Window][Scene Window]
|
[Window][Scene Window]
|
||||||
Pos=8,27
|
Pos=8,27
|
||||||
Size=365,1142
|
Size=364,685
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000009,0
|
DockId=0x00000009,0
|
||||||
|
|
||||||
[Docking][Data]
|
[Docking][Data]
|
||||||
DockSpace ID=0x14621557 Window=0x3DA2F1DE Pos=8,27 Size=1904,1142 Split=X Selected=0xF7365A5A
|
DockSpace ID=0x14621557 Window=0x3DA2F1DE Pos=8,27 Size=1264,685 Split=X Selected=0xF7365A5A
|
||||||
DockNode ID=0x00000009 Parent=0x14621557 SizeRef=365,1142 HiddenTabBar=1 Selected=0x3DC5AC3F
|
DockNode ID=0x00000009 Parent=0x14621557 SizeRef=364,1142 HiddenTabBar=1 Selected=0x3DC5AC3F
|
||||||
DockNode ID=0x0000000A Parent=0x14621557 SizeRef=1537,1142 Split=X
|
DockNode ID=0x0000000A Parent=0x14621557 SizeRef=1538,1142 Split=X
|
||||||
DockNode ID=0x00000007 Parent=0x0000000A SizeRef=357,1142 Selected=0x7737E8B2
|
DockNode ID=0x00000007 Parent=0x0000000A SizeRef=357,1142 Selected=0x7737E8B2
|
||||||
DockNode ID=0x00000008 Parent=0x0000000A SizeRef=1545,1142 Split=X
|
DockNode ID=0x00000008 Parent=0x0000000A SizeRef=1545,1142 Split=X
|
||||||
DockNode ID=0x00000001 Parent=0x00000008 SizeRef=1211,1142 Split=Y Selected=0xF7365A5A
|
DockNode ID=0x00000001 Parent=0x00000008 SizeRef=1211,1142 Split=Y Selected=0xF7365A5A
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Dear ImGui
|
// Dear ImGui
|
||||||
#include "imgui.h"
|
#include "imgui.h"
|
||||||
#include "imgui_impl_glfw.h"
|
#include "imgui_impl_glfw.h"
|
||||||
@ -23,6 +25,8 @@
|
|||||||
#include "Windows/SceneWindow.h"
|
#include "Windows/SceneWindow.h"
|
||||||
|
|
||||||
#include "Engine/ThemeManager.h"
|
#include "Engine/ThemeManager.h"
|
||||||
|
#include "Engine/SceneManager.h"
|
||||||
|
|
||||||
|
|
||||||
// #define YAML_CPP_STATIC_DEFINE
|
// #define YAML_CPP_STATIC_DEFINE
|
||||||
#include <yaml-cpp/yaml.h>
|
#include <yaml-cpp/yaml.h>
|
||||||
@ -37,7 +41,6 @@ std::vector<std::shared_ptr<GameObject>> g_GameObjects;
|
|||||||
|
|
||||||
int g_GPU_Triangles_drawn_to_screen = 0;
|
int g_GPU_Triangles_drawn_to_screen = 0;
|
||||||
|
|
||||||
|
|
||||||
GameObject *g_SelectedObject; // Pointer to the currently selected object
|
GameObject *g_SelectedObject; // Pointer to the currently selected object
|
||||||
|
|
||||||
bool MyEngine::Init(int width, int height, const std::string &title)
|
bool MyEngine::Init(int width, int height, const std::string &title)
|
||||||
@ -313,7 +316,19 @@ void MyEngine::ShowDockSpace()
|
|||||||
if (ImGui::BeginMenu("File"))
|
if (ImGui::BeginMenu("File"))
|
||||||
{
|
{
|
||||||
if (ImGui::MenuItem("Exit"))
|
if (ImGui::MenuItem("Exit"))
|
||||||
|
{
|
||||||
m_Running = false; // Stop the engine
|
m_Running = false; // Stop the engine
|
||||||
|
}
|
||||||
|
if (ImGui::MenuItem("Save"))
|
||||||
|
{
|
||||||
|
m_LoggerWindow->AddLog("Saveing Scene");
|
||||||
|
|
||||||
|
}
|
||||||
|
if (ImGui::MenuItem("Load"))
|
||||||
|
{
|
||||||
|
m_LoggerWindow->AddLog("Loading Scene");
|
||||||
|
|
||||||
|
}
|
||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
ImGui::EndMenuBar();
|
ImGui::EndMenuBar();
|
||||||
|
44
src/Engine/SceneManager.cpp
Normal file
44
src/Engine/SceneManager.cpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#include "SceneManager.h"
|
||||||
|
|
||||||
|
#include "Component.h"
|
||||||
|
#include "Transform.h"
|
||||||
|
#include "Mesh.h"
|
||||||
|
#include "GameObject.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include <yaml-cpp/yaml.h>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void SceneManager::SaveScene(const std::vector<std::shared_ptr<GameObject>> &gameobjects, const std::string &filename)
|
||||||
|
{
|
||||||
|
YAML::Node sceneNode;
|
||||||
|
|
||||||
|
for (const auto &gameobject : gameobjects)
|
||||||
|
{
|
||||||
|
sceneNode["Entities"].push_back(gameobject->Serialize());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ofstream fout(filename);
|
||||||
|
fout << sceneNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SceneManager::LoadScene(std::vector<std::shared_ptr<GameObject>> &gameobjects, const std::string &filename)
|
||||||
|
{
|
||||||
|
YAML::Node sceneNode = YAML::LoadFile(filename);
|
||||||
|
gameobjects.clear();
|
||||||
|
|
||||||
|
if (sceneNode["Entities"])
|
||||||
|
{
|
||||||
|
for (const auto &gameobjectNode : sceneNode["Entities"])
|
||||||
|
{
|
||||||
|
int id = gameobjectNode["ID"].as<int>();
|
||||||
|
std::string name = gameobjectNode["Name"].as<std::string>();
|
||||||
|
auto gameobject = std::make_shared<GameObject>(id, name);
|
||||||
|
gameobject->Deserialize(gameobjectNode);
|
||||||
|
gameobjects.push_back(gameobject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
13
src/Engine/SceneManager.h
Normal file
13
src/Engine/SceneManager.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include "GameObject.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class SceneManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void SaveScene(const std::vector<std::shared_ptr<GameObject>> &gameobjects, const std::string &filename);
|
||||||
|
void LoadScene(std::vector<std::shared_ptr<GameObject>> &gameobjects, const std::string &filename);
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user