Compare commits

..

No commits in common. "ba69726e336c0619ec1328162d72ce71d5972285" and "145338d666c4bf2f2454ec0fbe7902d7f30f6788" have entirely different histories.

18 changed files with 80 additions and 127 deletions

5
.gitignore vendored
View File

@ -17,8 +17,3 @@ x64/
!sponza.gltf !sponza.gltf
imgui.ini imgui.ini
libs/physx/physx/include/
libs/physx/physx/compiler/
libs/physx/physx/buildtools/
libs/physx/physx/bin/
libs/nativefiledialog/build/

6
.gitmodules vendored
View File

@ -36,9 +36,3 @@
[submodule "libs/nativefiledialog"] [submodule "libs/nativefiledialog"]
path = libs/nativefiledialog path = libs/nativefiledialog
url = https://git.barink.dev/Nigel/nativefiledialog.git url = https://git.barink.dev/Nigel/nativefiledialog.git
[submodule "libs/mINI"]
path = libs/mINI
url = https://github.com/pulzed/mINI.git
[submodule "libs/imgui-filebrowser"]
path = libs/imgui-filebrowser
url = https://github.com/AirGuanZ/imgui-filebrowser.git

BIN
Editor/Assets/Cube.mesh Normal file

Binary file not shown.

View File

@ -30,7 +30,6 @@ includedirs{
incfolder["entt"], incfolder["entt"],
incfolder["yamlcpp"], incfolder["yamlcpp"],
incfolder["nativefiledialog"], incfolder["nativefiledialog"],
incfolder["mINI"]
} }

View File

@ -48,9 +48,6 @@ void MainMenuBar::ApplicationMenu(Project& project) {
if (ImGui::MenuItem("Preferences")) if (ImGui::MenuItem("Preferences"))
{ {
@ -75,9 +72,6 @@ void MainMenuBar::SceneMenu(Project& project, YoggieEngine::Scene& scene) {
switch (result) { switch (result) {
case(NFD_OKAY): case(NFD_OKAY):
SaveScene(path, scene); SaveScene(path, scene);
project.AddScene(scene);
break; break;
case(NFD_CANCEL): case(NFD_CANCEL):
break; break;

View File

@ -13,15 +13,6 @@ void Project::SaveProject(std::filesystem::path path, Project& project)
projectYAML << YAML::Key << "Project" << YAML::Value << project.Name; projectYAML << YAML::Key << "Project" << YAML::Value << project.Name;
projectYAML << YAML::Key << "Directory" << YAML::Value << path.parent_path().u8string(); projectYAML << YAML::Key << "Directory" << YAML::Value << path.parent_path().u8string();
projectYAML << YAML::EndMap; projectYAML << YAML::EndMap;
projectYAML << YAML::BeginMap;
projectYAML << YAML::Key << "Scenes" << YAML::Value << YAML::BeginSeq;
for (auto scene : project.Scenes) {
projectYAML << scene->name;
}
projectYAML << YAML::EndSeq;
std::ofstream projectFile; std::ofstream projectFile;
projectFile.open(path.u8string()); projectFile.open(path.u8string());
@ -65,12 +56,10 @@ namespace YAML {
return false; return false;
rhs.setName(node["Project"].as<std::string>()); rhs.setName(node["Project"].as<std::string>());
rhs.setProjectDirectory(node["Directory"].as<std::string>()); rhs.setProjectDirectory(node["Directory"].as<std::string>());
return true; return true;
} }
}; };
} }

View File

@ -1,10 +1,6 @@
#pragma once #pragma once
#include <filesystem> #include <filesystem>
#include <iostream> #include <iostream>
#include "../../YoggieEngine/src/YoggieEngine.h"
#include <yaml-cpp/yaml.h>
class Project { class Project {
public: public:
Project() = default; Project() = default;
@ -17,21 +13,10 @@ public:
void setProjectDirectory(std::string& path) { ProjectDirectory = std::filesystem::path(path); } void setProjectDirectory(std::string& path) { ProjectDirectory = std::filesystem::path(path); }
const std::filesystem::path GetProjectDirectory() { return ProjectDirectory; } const std::filesystem::path GetProjectDirectory() { return ProjectDirectory; }
void AddScene(YoggieEngine::Scene& scene)
{
Scenes.push_back(&scene);
}
static void SaveProject(std::filesystem::path path, Project& project); static void SaveProject(std::filesystem::path path, Project& project);
static void LoadProject(std::filesystem::path path, Project& project); static void LoadProject(std::filesystem::path path, Project& project);
private: private:
std::string Name; std::string Name;
std::filesystem::path ProjectDirectory; std::filesystem::path ProjectDirectory;
std::vector<YoggieEngine::Scene*> Scenes;
friend class YAML::convert<Project>;
}; };

View File

@ -3,14 +3,11 @@
void Inspector::Draw() void Inspector::Draw()
{ {
if (selected.isValid()) {
AddComponentDropDown();
ShowComponents();
}
} }
void Inspector::AddComponentDropDown() void Inspector::AddComponentDropDown(YoggieEngine::Entity& selected)
{ {
static char* names[] = { "Script Component", "Camera Component", "Light Component" }; static char* names[] = { "Script Component", "Camera Component", "Light Component" };
if (ImGui::Button("Add Component")) if (ImGui::Button("Add Component"))
@ -31,7 +28,7 @@ void Inspector::AddComponentDropDown()
} }
void Inspector::ShowComponents() void Inspector::ShowComponents(YoggieEngine::Entity& selected)
{ {
auto component = selected.GetComponent<YoggieEngine::IdentifierComponent>(); auto component = selected.GetComponent<YoggieEngine::IdentifierComponent>();
ImGui::InputText("Name:", (char*)component.name.c_str(), component.name.size() * sizeof(char), ImGuiInputTextFlags_ReadOnly); ImGui::InputText("Name:", (char*)component.name.c_str(), component.name.size() * sizeof(char), ImGuiInputTextFlags_ReadOnly);

View File

@ -8,15 +8,13 @@ inline void ComponentView(const std::string& componentName, voidFunction func);
class Inspector : public EditorWindow { class Inspector : public EditorWindow {
public: public:
Inspector( YoggieEngine::Entity& selected ) : EditorWindow("Inspector"), selected(selected){} Inspector() : EditorWindow("Inspector") {}
void Draw()override; void Draw()override;
private:
void AddComponentDropDown(); void AddComponentDropDown(YoggieEngine::Entity& selected);
void ShowComponents();
void ShowComponents(YoggieEngine::Entity& selected);
YoggieEngine::Entity& selected;
}; };

View File

@ -6,8 +6,8 @@ void SceneExplorer::Draw()
YoggieEngine::Entity entity = YoggieEngine::Entity(enttNumber, &scene); YoggieEngine::Entity entity = YoggieEngine::Entity(enttNumber, &scene);
auto id = entity.GetComponent<YoggieEngine::IdentifierComponent>(); auto id = entity.GetComponent<YoggieEngine::IdentifierComponent>();
if (ImGui::Selectable(id.name.c_str(), entity == selected)) { if (ImGui::Selectable(id.name.c_str(), enttNumber == selected)) {
selected = YoggieEngine::Entity(enttNumber, &scene); selected = enttNumber;
} }
}); });
} }

View File

@ -5,7 +5,7 @@
class SceneExplorer : public EditorWindow { class SceneExplorer : public EditorWindow {
public: public:
SceneExplorer(YoggieEngine::Entity& selected, YoggieEngine::Scene& scene) SceneExplorer(entt::entity& selected, YoggieEngine::Scene& scene)
: EditorWindow("SceneExplorer"), scene(scene), selected(selected) : EditorWindow("SceneExplorer"), scene(scene), selected(selected)
{} {}
@ -13,7 +13,7 @@ public:
private: private:
YoggieEngine::Entity& selected; entt::entity selected;
YoggieEngine::Scene& scene; YoggieEngine::Scene& scene;

View File

@ -1,10 +1,17 @@
#include "../../YoggieEngine/src/EntryPoint.h" #include "../../YoggieEngine/src/EntryPoint.h"
#include <mini/ini.h> #include "../../YoggieEngine/src/AssetManager/ModelImporter.h"
#include "../../YoggieEngine/src/Physics/Physics.h"
#include <nfd.h>
#include <glm/glm.hpp> #include <glm/glm.hpp>
#include <glm/gtc/type_ptr.hpp> #include <glm/gtc/type_ptr.hpp>
#include <glm/gtc/matrix_transform.hpp> #include <glm/gtc/matrix_transform.hpp>
#include "Project/Project.h"
#include "AssetManagement/SceneSerializer.h" #include "AssetManagement/SceneSerializer.h"
#include "AssetManagement/AssetManager.h" #include "AssetManagement/AssetManager.h"
#include "Views/Viewport.h" #include "Views/Viewport.h"
#include "PropertyPanels/SceneExplorer.h" #include "PropertyPanels/SceneExplorer.h"
#include "AssetManagement/AssetFinder.h" #include "AssetManagement/AssetFinder.h"
@ -17,32 +24,25 @@
using namespace YoggieEngine; using namespace YoggieEngine;
class Editor : public Application { class Editor : public Application {
public: public:
Editor() : Application("Editor"){} Editor() : Application("Editor"), Selected((entt::entity)-1){}
void Run() override void Run() override
{ {
std::string path = (std::filesystem::current_path()).string();
project.setProjectDirectory(path);
AssetManager::Init();
AssetManager::setAssetPath(project.GetProjectDirectory());
AssetManager::BuildAssetView();
LoadLastOrEmptyProject(); LoadLastOrEmptyProject();
MainMenuBar menuBar = MainMenuBar();
ProjectInfo projectInfo(project); ProjectInfo projectInfo(project);
Viewport sceneview = Viewport(scene); Viewport sceneview = Viewport(scene);
RuntimeControls rc = RuntimeControls(); RuntimeControls rc = RuntimeControls();
SceneExplorer explorer(Selected, scene); SceneExplorer explorer(Selected, scene);
Inspector inspector = Inspector(Selected); Inspector inspector = Inspector();
Settings settings = Settings(); Settings settings = Settings();
// AssetFinder assetsView = AssetFinder(); // AssetFinder assetsView = AssetFinder();
Console console = Console(); Console console = Console();
Selected = YoggieEngine::Entity((entt::entity) -1, &scene);
double previous = glfwGetTime(); double previous = glfwGetTime();
double lag = 0.0; double lag = 0.0;
while (!appWindow.WindowShouldClose()) while (!appWindow.WindowShouldClose())
@ -114,19 +114,23 @@ public:
} }
GuiBegin(); GuiBegin();
{
MainMenuBar menuBar = MainMenuBar();
// Show a menu bar // Show a menu bar
menuBar.ApplicationMenu(project); menuBar.ApplicationMenu(project);
menuBar.SceneMenu(project, scene); menuBar.SceneMenu(project, scene);
menuBar.SelectMenu(); menuBar.SelectMenu();
menuBar.WindowMenu(); menuBar.WindowMenu();
menuBar.DebugMenu(); menuBar.DebugMenu();
menuBar.Help(); menuBar.Help();
if (scene.getReg().valid(Selected)) {
Entity SelectedEntity = Entity(Selected, &scene);
inspector.AddComponentDropDown(SelectedEntity);
inspector.ShowComponents(SelectedEntity);
} }
projectInfo.Update(); projectInfo.Update();
sceneview.Update(); sceneview.Update();
rc.Update(); rc.Update();
@ -152,33 +156,48 @@ public:
// Otherwise load no project.. // Otherwise load no project..
// OR // OR
// Load an empty project. // Load an empty project.
mINI::INIStructure ini;
if (std::filesystem::exists("build\\Debug\\Editor.ini")) std::string path = (std::filesystem::current_path()).string();
{ project.setProjectDirectory(path);
mINI::INIFile file("build\\Debug\\Editor.ini");
file.read(ini);
}
else
{
spdlog::debug("Could not find an `Editor.ini` file.");
}
if (ini["editor"]["openlastproject"] == "TRUE") AssetManager::Init();
{ AssetManager::setAssetPath(project.GetProjectDirectory());
Project::LoadProject(ini["cache"]["project"], project); AssetManager::BuildAssetView();
LoadScene(ini["cache"]["scene"], scene);
} // Create a level and load it as the current level
else auto importer = ModelImporter();
{
spdlog::debug("Starting without a project. Please create one.");
} // create an ambient light source
auto light = scene.AddEntity("Light");
auto& lightComponent = light.AddComponent<LightComponent>();
lightComponent.Color = glm::vec3(1.0f);
// Create a cube
auto model = importer.Import("build/Debug/Models/Cube.obj");
auto cube = scene.AddEntity("Cube");
auto& render3DComponent = cube.AddComponent<Render3DComponent>();
render3DComponent.mesh = *(model->renderable->mesh);
cube.GetComponent<TransformComponent>().Position = glm::vec3(1.0f, 0.0f, 5.0f);
auto cube2 = scene.AddEntity("Cube2");
auto& rendercube2 = cube2.AddComponent<Render3DComponent>();
rendercube2.mesh = *(model->renderable->mesh);
auto& relationcube = cube.AddComponent<RelationComponent>(cube2);
auto& rigidbodycomp = cube.AddComponent<RigidBody>();
auto& rigidbodycomp2 = cube2.AddComponent<RigidBody>();
auto Grass = scene.AddEntity("Grass/Window-Pane");
//auto& renderGrass = Grass.AddComponent<Render3DComponent>();
} }
private: private:
bool SimulatePhysics = true; bool SimulatePhysics = true;
YoggieEngine::Entity Selected; entt::entity Selected;
Project project; Project project;
Scene scene; Scene scene;

View File

@ -1,8 +1,7 @@
#pragma once #pragma once
#include "Scene.h" typedef uint64_t ENTITY_UUID;
namespace YoggieEngine { namespace YoggieEngine {
class Scene;
class Entity { class Entity {
public: public:
Entity() = default; Entity() = default;
@ -26,15 +25,8 @@ namespace YoggieEngine {
} }
// NOTE: Not Scene context aware!! // NOTE: Not Scene context aware!!
inline bool operator== (Entity& other) { bool operator== (Entity& other) {
return m_entity == other.m_entity;// && other.m_scene == m_scene; return m_entity == other.m_entity;
}
inline bool isValid() {
if (m_scene == nullptr)
return false;
return m_scene->m_registry.valid(m_entity);
} }
private: private:

View File

@ -4,11 +4,6 @@
using namespace entt; using namespace entt;
namespace YoggieEngine{ namespace YoggieEngine{
Scene::Scene(const std::string& name): name(name)
{
}
Scene::Scene() Scene::Scene()
{ {
} }

View File

@ -4,7 +4,6 @@ namespace YoggieEngine {
class Scene class Scene
{ {
public: public:
Scene(const std::string& name );
Scene(); Scene();
~Scene(); ~Scene();
@ -16,7 +15,6 @@ namespace YoggieEngine {
void Stop(); void Stop();
entt::registry& getReg() { return m_registry; } entt::registry& getReg() { return m_registry; }
std::string name;
private: private:
entt::registry m_registry; entt::registry m_registry;

View File

@ -6,7 +6,7 @@ incfolder["assimp"] = "%{wks.location}/libs/assimp/include"
incfolder["glm"] = "%{wks.location}/libs/glm" incfolder["glm"] = "%{wks.location}/libs/glm"
incfolder["entt"] = "%{wks.location}/libs/entt/src" incfolder["entt"] = "%{wks.location}/libs/entt/src"
incfolder["yamlcpp"] = "%{wks.location}/libs/yaml-cpp/include" incfolder["yamlcpp"] = "%{wks.location}/libs/yaml-cpp/include"
incfolder["mINI"] = "%{wks.location}/libs/mINI/src"
-- Graphics -- Graphics
incfolder["glad"] = "%{wks.location}/libs/glad/include" incfolder["glad"] = "%{wks.location}/libs/glad/include"
incfolder["glfw"] = "%{wks.location}/libs/glfw/include" incfolder["glfw"] = "%{wks.location}/libs/glfw/include"

@ -1 +0,0 @@
Subproject commit cfccc2aab651cb19cbc2c3ad36be78c36078ec76

@ -1 +0,0 @@
Subproject commit a1ff72e8898db8b53282e9eb7c7ec5973519787e