Compare commits
	
		
			3 Commits
		
	
	
		
			145338d666
			...
			ba69726e33
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ba69726e33 | |||
| 7223c20f1d | |||
| 282844b905 | 
							
								
								
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -16,4 +16,9 @@ x64/ | ||||
| *.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
									
									
								
							
							
						
						
									
										6
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							| @ -36,3 +36,9 @@ | ||||
| [submodule "libs/nativefiledialog"] | ||||
| 	path = libs/nativefiledialog | ||||
| 	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 | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							| @ -30,6 +30,7 @@ includedirs{ | ||||
|   incfolder["entt"], | ||||
|   incfolder["yamlcpp"], | ||||
|   incfolder["nativefiledialog"], | ||||
|   incfolder["mINI"] | ||||
|  | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -47,6 +47,9 @@ void MainMenuBar::ApplicationMenu(Project& project) { | ||||
|         } | ||||
|  | ||||
|  | ||||
|    | ||||
|  | ||||
|  | ||||
|  | ||||
|         if (ImGui::MenuItem("Preferences")) | ||||
|         { | ||||
| @ -72,6 +75,9 @@ void MainMenuBar::SceneMenu(Project& project, YoggieEngine::Scene& scene) { | ||||
|             switch (result) { | ||||
|             case(NFD_OKAY): | ||||
|                 SaveScene(path, scene); | ||||
|                  | ||||
|                 project.AddScene(scene); | ||||
|  | ||||
|                 break; | ||||
|             case(NFD_CANCEL): | ||||
|                 break; | ||||
|  | ||||
| @ -13,6 +13,15 @@ void Project::SaveProject(std::filesystem::path path, Project& project) | ||||
| 	projectYAML << YAML::Key << "Project" << YAML::Value << project.Name;	 | ||||
| 	projectYAML << YAML::Key << "Directory" << YAML::Value << path.parent_path().u8string(); | ||||
| 	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; | ||||
|  | ||||
| 	projectFile.open(path.u8string()); | ||||
| @ -56,10 +65,12 @@ namespace YAML { | ||||
| 				return false; | ||||
| 			rhs.setName(node["Project"].as<std::string>()); | ||||
| 			rhs.setProjectDirectory(node["Directory"].as<std::string>()); | ||||
| 			 | ||||
| 		 | ||||
|  | ||||
| 			return true; | ||||
| 		} | ||||
|  | ||||
|  | ||||
| 	}; | ||||
|  | ||||
| } | ||||
| @ -1,6 +1,10 @@ | ||||
| #pragma once | ||||
| #include <filesystem> | ||||
| #include <iostream> | ||||
| #include "../../YoggieEngine/src/YoggieEngine.h" | ||||
| #include <yaml-cpp/yaml.h> | ||||
|  | ||||
|  | ||||
| class Project { | ||||
| public: | ||||
| 	Project() = default; | ||||
| @ -13,10 +17,21 @@ public: | ||||
| 	void setProjectDirectory(std::string& path) { ProjectDirectory = std::filesystem::path(path); } | ||||
| 	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 LoadProject(std::filesystem::path path, Project& project); | ||||
| private: | ||||
| 	std::string Name; | ||||
| 	std::filesystem::path ProjectDirectory; | ||||
|  | ||||
| 	std::vector<YoggieEngine::Scene*> Scenes; | ||||
|  | ||||
| 	friend class YAML::convert<Project>; | ||||
|  | ||||
| }; | ||||
|  | ||||
|  | ||||
| @ -3,11 +3,14 @@ | ||||
|  | ||||
| void Inspector::Draw()  | ||||
| { | ||||
|  | ||||
| } | ||||
|     if (selected.isValid()) { | ||||
|         AddComponentDropDown(); | ||||
|         ShowComponents(); | ||||
|     } | ||||
| }         | ||||
|  | ||||
|  | ||||
| void Inspector::AddComponentDropDown(YoggieEngine::Entity& selected)  | ||||
| void Inspector::AddComponentDropDown()  | ||||
| { | ||||
|     static char* names[] = { "Script Component", "Camera Component", "Light Component" }; | ||||
|     if (ImGui::Button("Add Component")) | ||||
| @ -28,7 +31,7 @@ void Inspector::AddComponentDropDown(YoggieEngine::Entity& selected) | ||||
| } | ||||
|  | ||||
|  | ||||
| void Inspector::ShowComponents(YoggieEngine::Entity& selected) | ||||
| void Inspector::ShowComponents() | ||||
| { | ||||
|     auto component = selected.GetComponent<YoggieEngine::IdentifierComponent>(); | ||||
|     ImGui::InputText("Name:", (char*)component.name.c_str(), component.name.size() * sizeof(char), ImGuiInputTextFlags_ReadOnly); | ||||
|  | ||||
| @ -8,13 +8,15 @@ inline void ComponentView(const std::string& componentName, voidFunction func); | ||||
|  | ||||
| class Inspector : public EditorWindow { | ||||
| public: | ||||
|     Inspector() : EditorWindow("Inspector") {} | ||||
|     Inspector( YoggieEngine::Entity& selected ) : EditorWindow("Inspector"), selected(selected){} | ||||
|  | ||||
|     void Draw()override; | ||||
|  | ||||
| private: | ||||
|  | ||||
|     void AddComponentDropDown(YoggieEngine::Entity& selected); | ||||
|     void AddComponentDropDown(); | ||||
|     void ShowComponents(); | ||||
|  | ||||
|     void ShowComponents(YoggieEngine::Entity& selected); | ||||
|  | ||||
|     YoggieEngine::Entity& selected; | ||||
| }; | ||||
|  | ||||
| @ -6,8 +6,8 @@ void SceneExplorer::Draw() | ||||
|         YoggieEngine::Entity entity = YoggieEngine::Entity(enttNumber, &scene); | ||||
|         auto id = entity.GetComponent<YoggieEngine::IdentifierComponent>(); | ||||
|  | ||||
|         if (ImGui::Selectable(id.name.c_str(), enttNumber == selected)) { | ||||
|             selected = enttNumber; | ||||
|         if (ImGui::Selectable(id.name.c_str(), entity == selected)) { | ||||
|             selected = YoggieEngine::Entity(enttNumber, &scene); | ||||
|         } | ||||
|     }); | ||||
| } | ||||
| @ -5,7 +5,7 @@ | ||||
|  | ||||
| class SceneExplorer : public EditorWindow { | ||||
| public: | ||||
|     SceneExplorer(entt::entity& selected, YoggieEngine::Scene& scene) | ||||
|     SceneExplorer(YoggieEngine::Entity& selected, YoggieEngine::Scene& scene) | ||||
|         : EditorWindow("SceneExplorer"), scene(scene), selected(selected) | ||||
|     {} | ||||
|  | ||||
| @ -13,7 +13,7 @@ public: | ||||
|  | ||||
|  | ||||
| private: | ||||
|     entt::entity selected; | ||||
|     YoggieEngine::Entity& selected; | ||||
|     YoggieEngine::Scene& scene; | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -1,17 +1,10 @@ | ||||
| #include "../../YoggieEngine/src/EntryPoint.h" | ||||
| #include "../../YoggieEngine/src/AssetManager/ModelImporter.h" | ||||
| #include "../../YoggieEngine/src/Physics/Physics.h" | ||||
|  | ||||
| #include <nfd.h> | ||||
|  | ||||
| #include <mini/ini.h> | ||||
| #include <glm/glm.hpp> | ||||
| #include <glm/gtc/type_ptr.hpp> | ||||
| #include <glm/gtc/matrix_transform.hpp> | ||||
|  | ||||
| #include "Project/Project.h" | ||||
| #include "AssetManagement/SceneSerializer.h" | ||||
| #include "AssetManagement/AssetManager.h" | ||||
|  | ||||
| #include "Views/Viewport.h" | ||||
| #include "PropertyPanels/SceneExplorer.h" | ||||
| #include "AssetManagement/AssetFinder.h" | ||||
| @ -24,25 +17,32 @@ | ||||
|  | ||||
| using namespace YoggieEngine; | ||||
|  | ||||
|  | ||||
| class Editor : public Application { | ||||
| public: | ||||
|     Editor() : Application("Editor"), Selected((entt::entity)-1){} | ||||
|     Editor() : Application("Editor"){} | ||||
|  | ||||
|     void Run() override | ||||
|     { | ||||
|         std::string path = (std::filesystem::current_path()).string(); | ||||
|         project.setProjectDirectory(path); | ||||
|  | ||||
|         AssetManager::Init(); | ||||
|         AssetManager::setAssetPath(project.GetProjectDirectory()); | ||||
|         AssetManager::BuildAssetView(); | ||||
|  | ||||
|         LoadLastOrEmptyProject(); | ||||
|  | ||||
|         MainMenuBar menuBar = MainMenuBar(); | ||||
|         ProjectInfo projectInfo(project); | ||||
|         Viewport sceneview = Viewport(scene); | ||||
|         RuntimeControls rc = RuntimeControls(); | ||||
|         SceneExplorer explorer(Selected, scene); | ||||
|         Inspector inspector = Inspector(); | ||||
|         Inspector inspector = Inspector(Selected); | ||||
|         Settings settings = Settings(); | ||||
|         // AssetFinder assetsView = AssetFinder(); | ||||
|         Console console = Console(); | ||||
|  | ||||
|         Selected = YoggieEngine::Entity((entt::entity) -1, &scene); | ||||
|  | ||||
|         double previous = glfwGetTime(); | ||||
|         double lag = 0.0; | ||||
|         while (!appWindow.WindowShouldClose()) | ||||
| @ -114,23 +114,19 @@ public: | ||||
|             } | ||||
|  | ||||
|             GuiBegin(); | ||||
|             { | ||||
|                 MainMenuBar menuBar = MainMenuBar(); | ||||
|  | ||||
|                 // Show a menu bar | ||||
|                 menuBar.ApplicationMenu(project); | ||||
|                 menuBar.SceneMenu(project, scene); | ||||
|                 menuBar.SelectMenu(); | ||||
|                 menuBar.WindowMenu(); | ||||
|                 menuBar.DebugMenu(); | ||||
|                 menuBar.Help(); | ||||
|  | ||||
|             // Show a menu bar | ||||
|             menuBar.ApplicationMenu(project); | ||||
|             menuBar.SceneMenu(project, scene); | ||||
|             menuBar.SelectMenu(); | ||||
|             menuBar.WindowMenu(); | ||||
|             menuBar.DebugMenu(); | ||||
|             menuBar.Help(); | ||||
|            | ||||
|       | ||||
|             if (scene.getReg().valid(Selected)) { | ||||
|                 Entity SelectedEntity = Entity(Selected, &scene); | ||||
|                 inspector.AddComponentDropDown(SelectedEntity); | ||||
|                 inspector.ShowComponents(SelectedEntity); | ||||
|             } | ||||
|  | ||||
|  | ||||
|            | ||||
|             projectInfo.Update(); | ||||
|             sceneview.Update(); | ||||
|             rc.Update(); | ||||
| @ -156,48 +152,33 @@ public: | ||||
|        // Otherwise load no project.. | ||||
|        // OR  | ||||
|        // Load an empty project. | ||||
|         mINI::INIStructure ini; | ||||
|  | ||||
|         std::string path = (std::filesystem::current_path()).string(); | ||||
|         project.setProjectDirectory(path); | ||||
|         if (std::filesystem::exists("build\\Debug\\Editor.ini"))  | ||||
|         { | ||||
|             mINI::INIFile file("build\\Debug\\Editor.ini");    | ||||
|             file.read(ini); | ||||
|         } | ||||
|         else  | ||||
|         { | ||||
|             spdlog::debug("Could not find an `Editor.ini` file."); | ||||
|         } | ||||
|  | ||||
|         AssetManager::Init(); | ||||
|         AssetManager::setAssetPath(project.GetProjectDirectory()); | ||||
|         AssetManager::BuildAssetView(); | ||||
|         if (ini["editor"]["openlastproject"] == "TRUE")  | ||||
|         { | ||||
|             Project::LoadProject(ini["cache"]["project"], project); | ||||
|             LoadScene(ini["cache"]["scene"], scene); | ||||
|  | ||||
|         // Create a level and load it as the current level | ||||
|         auto importer = ModelImporter(); | ||||
|  | ||||
|  | ||||
|         // 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>(); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             spdlog::debug("Starting without a project. Please create one."); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| private: | ||||
|     bool SimulatePhysics = true; | ||||
|     entt::entity  Selected; | ||||
|     YoggieEngine::Entity  Selected; | ||||
|  | ||||
|     Project project; | ||||
|     Scene scene; | ||||
|  | ||||
| @ -1,7 +1,8 @@ | ||||
| #pragma once | ||||
| typedef uint64_t ENTITY_UUID; | ||||
| #include "Scene.h" | ||||
|  | ||||
| namespace YoggieEngine { | ||||
| 	class Scene; | ||||
| 	 | ||||
| 	class Entity { | ||||
| 	public: | ||||
| 		Entity() = default; | ||||
| @ -25,8 +26,15 @@ namespace YoggieEngine { | ||||
| 		} | ||||
|  | ||||
| 		// NOTE: Not Scene context aware!! | ||||
| 		bool operator== (Entity& other) { | ||||
| 			return m_entity == other.m_entity; | ||||
| 		inline bool operator== (Entity& other) { | ||||
| 			return m_entity == other.m_entity;// && other.m_scene == m_scene; | ||||
| 		} | ||||
|  | ||||
| 		inline bool isValid() { | ||||
| 			if (m_scene == nullptr) | ||||
| 				return false; | ||||
|  | ||||
| 			return m_scene->m_registry.valid(m_entity); | ||||
| 		} | ||||
|  | ||||
| 	private: | ||||
|  | ||||
| @ -4,6 +4,11 @@ | ||||
| using namespace entt; | ||||
|  | ||||
| namespace YoggieEngine{ | ||||
|  | ||||
| 	Scene::Scene(const std::string& name): name(name)  | ||||
| 	{ | ||||
| 	} | ||||
|  | ||||
| 	Scene::Scene() | ||||
| 	{ | ||||
| 	} | ||||
|  | ||||
| @ -4,6 +4,7 @@ namespace YoggieEngine { | ||||
| 	class Scene | ||||
| 	{ | ||||
| 	public: | ||||
| 		Scene(const std::string& name ); | ||||
| 		Scene(); | ||||
| 		~Scene(); | ||||
|  | ||||
| @ -15,6 +16,7 @@ namespace YoggieEngine { | ||||
| 		void Stop(); | ||||
|  | ||||
| 		entt::registry& getReg() { return m_registry; } | ||||
| 		std::string name; | ||||
|  | ||||
| 	private: | ||||
| 		entt::registry m_registry; | ||||
|  | ||||
| @ -6,7 +6,7 @@ incfolder["assimp"] = "%{wks.location}/libs/assimp/include" | ||||
| incfolder["glm"] = "%{wks.location}/libs/glm" | ||||
| incfolder["entt"] = "%{wks.location}/libs/entt/src" | ||||
| incfolder["yamlcpp"] = "%{wks.location}/libs/yaml-cpp/include" | ||||
|  | ||||
| incfolder["mINI"] = "%{wks.location}/libs/mINI/src" | ||||
| -- Graphics | ||||
| incfolder["glad"] = "%{wks.location}/libs/glad/include" | ||||
| incfolder["glfw"] = "%{wks.location}/libs/glfw/include" | ||||
|  | ||||
							
								
								
									
										1
									
								
								libs/imgui-filebrowser
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								libs/imgui-filebrowser
									
									
									
									
									
										Submodule
									
								
							 Submodule libs/imgui-filebrowser added at cfccc2aab6
									
								
							
							
								
								
									
										1
									
								
								libs/mINI
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								libs/mINI
									
									
									
									
									
										Submodule
									
								
							 Submodule libs/mINI added at a1ff72e889
									
								
							
		Reference in New Issue
	
	Block a user