Added a few thing , and started simplifying renderer
- Added context menu to Inspector - Added check to see if project path exists. - Simplifying the renderer design
This commit is contained in:
@ -16,6 +16,10 @@ public:
|
||||
AssetFinder () : EditorWindow("Assets") {}
|
||||
AssetFinder(const std::filesystem::path& projectdirectory) : EditorWindow("Assets")
|
||||
{
|
||||
assetIcon = YoggieEngine::Texture("rsc/AssetIcon.png");
|
||||
|
||||
spdlog::info("asset iconID: {0}", assetIcon.GetID());
|
||||
|
||||
for (auto& dir_entry : std::filesystem::directory_iterator(projectdirectory)) {
|
||||
auto filepath = dir_entry.path();
|
||||
|
||||
@ -39,7 +43,6 @@ public:
|
||||
spdlog::info("Created asset: {0}", asset.GetName());
|
||||
files.push_back(asset);
|
||||
|
||||
assetIcon = YoggieEngine::Texture("rsc/AssetIcon.png");
|
||||
|
||||
}
|
||||
|
||||
|
@ -8,9 +8,7 @@ public:
|
||||
Right = glm::vec3(-1.0f, 0.0f, 0.0f);
|
||||
Up = glm::vec3(0.0f, 1.0f, 0.0f);
|
||||
|
||||
projection = glm::perspective(glm::radians(65.0f), (800.0f / 600.0f), 0.001f, 100.0f);
|
||||
|
||||
|
||||
|
||||
view = glm::translate(glm::mat4(1.0f), Position) * glm::toMat4(glm::quat(Rotation));
|
||||
}
|
||||
|
||||
@ -19,8 +17,8 @@ public:
|
||||
view = glm::translate(glm::mat4(1.0f), Position) * glm::toMat4(glm::quat(Rotation));
|
||||
}
|
||||
|
||||
glm::vec3 Position;
|
||||
glm::vec3 Rotation;
|
||||
glm::vec3 Position = glm::vec3(0.0f);
|
||||
glm::vec3 Rotation = glm::vec3(0.0f);
|
||||
|
||||
private:
|
||||
|
||||
|
@ -17,15 +17,34 @@
|
||||
#include "IconsMaterialDesign.h"
|
||||
#include "Project/Project.h"
|
||||
#include <ImGuizmo.h>
|
||||
#include "EditorCamera.h"
|
||||
#include "../../YoggieEngine/src/Graphics/Memory/VertexArray.h"
|
||||
#include "../../YoggieEngine/src/Graphics/Memory/Buffer.h"
|
||||
|
||||
using namespace YoggieEngine;
|
||||
class EditorLayer : public Layer {
|
||||
|
||||
public:
|
||||
EditorLayer():
|
||||
EditorLayer() :
|
||||
Layer(),
|
||||
inspector (Selected)
|
||||
Logo("rsc/Yoggie.png"),
|
||||
inspector(Selected),
|
||||
scene(),
|
||||
renderer()
|
||||
{
|
||||
|
||||
spdlog::info("Colour attachment id: {0}", renderer.getCurrentFrameBuffer().GetColourAttachment());
|
||||
|
||||
Selected = YoggieEngine::Entity((entt::entity)-1, &scene);
|
||||
|
||||
AssetRegistry assetManager = AssetRegistry();
|
||||
// ModelLoader modelLoader = ModelLoader();
|
||||
|
||||
spdlog::info("{0}", project.GetProjectDirectory().string());
|
||||
|
||||
//auto latern = modelLoader.LoadAsset(std::filesystem::path("build/debug/Models/Latern.gltf"));
|
||||
//spdlog::info("Loaded mesh: {0}", latern.GetName());
|
||||
|
||||
}
|
||||
|
||||
void OnStartup() override {
|
||||
@ -33,27 +52,13 @@ public:
|
||||
project.setProjectDirectory(path);
|
||||
assetsView = AssetFinder(project.GetProjectDirectory());
|
||||
LoadLastOrEmptyProject();
|
||||
|
||||
AssetRegistry assetManager = AssetRegistry();
|
||||
ModelLoader modelLoader = ModelLoader();
|
||||
|
||||
spdlog::info( "{0}", project.GetProjectDirectory().string());
|
||||
|
||||
auto latern = modelLoader.LoadAsset(std::filesystem::path("build/debug/Models/Latern.gltf"));
|
||||
spdlog::info( "Loaded mesh: {0}" , latern.GetName() );
|
||||
|
||||
|
||||
cube = (ModelLoader()).LoadAsset(std::filesystem::path("build/debug/Models/cube.obj"));
|
||||
//Settings settings = Settings();
|
||||
//Console console = Console();
|
||||
|
||||
Logo = Texture("rsc/Yoggie.png", true);
|
||||
|
||||
|
||||
|
||||
Selected = YoggieEngine::Entity((entt::entity)-1, &scene);
|
||||
|
||||
}
|
||||
|
||||
glm::vec3 cameraPosition = glm::vec3(0.0f, 0.0f, -5.0f);
|
||||
glm::vec3 cameraRotation = glm::vec3(0.0f);
|
||||
void OnUpdate() override {
|
||||
scene.Update();
|
||||
/*
|
||||
@ -61,13 +66,59 @@ public:
|
||||
UpdateSceneCamera(sceneview);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
auto components = scene.getReg().view<Render3DComponent>();
|
||||
for(auto component : components){
|
||||
auto& renderComponent = YoggieEngine::Entity(component, &scene).GetComponent<Render3DComponent>();
|
||||
|
||||
renderComponent.mesh = cube;
|
||||
|
||||
if (renderComponent.VAO == 0 || renderComponent.IBO == 0) {
|
||||
VertexArray va = VertexArray();
|
||||
Buffer vertexBuffer = Buffer();
|
||||
Buffer elementBuffer = Buffer();
|
||||
|
||||
va.Create();
|
||||
va.Bind();
|
||||
|
||||
vertexBuffer.createBuffer();
|
||||
vertexBuffer.Bind(false);
|
||||
vertexBuffer.setBufferData((void*)&renderComponent.mesh.vertices[0], renderComponent.mesh.vertices.size() * sizeof(Vertex), false);
|
||||
|
||||
elementBuffer.createBuffer();
|
||||
elementBuffer.Bind(true);
|
||||
elementBuffer.setBufferData((void*)&renderComponent.mesh.elements[0], renderComponent.mesh.elements.size() * sizeof(unsigned int), true);
|
||||
|
||||
va.AttachAttribute(0, 3, sizeof(Vertex));
|
||||
|
||||
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)0);
|
||||
glEnableVertexAttribArray(0);
|
||||
glEnableVertexAttribArray(1);
|
||||
|
||||
va.Unbind();
|
||||
vertexBuffer.Unbind(false);
|
||||
elementBuffer.Unbind(true);
|
||||
|
||||
renderComponent.VAO = va.getID();
|
||||
renderComponent.IBO = elementBuffer.getBufferID();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
camera->view = glm::translate(glm::mat4(1.0f), cameraPosition) * glm::toMat4(glm::quat(cameraRotation));
|
||||
|
||||
renderer.Render(scene, *camera);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
void OnUI() override {
|
||||
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, { ImGui::GetWindowWidth(), 7 });
|
||||
ImGui::BeginMainMenuBar();
|
||||
int scaleFactor = 30;
|
||||
@ -216,7 +267,6 @@ public:
|
||||
ImGui::SameLine(ImGui::GetWindowWidth() - 120);
|
||||
|
||||
/*
|
||||
|
||||
ImGui::PopStyleColor();
|
||||
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.1f, 0.1f, 0.1f, 0.01f));
|
||||
if (ImGui::Button(ICON_MD_MINIMIZE)) { spdlog::info("Minimize"); }
|
||||
@ -268,9 +318,17 @@ public:
|
||||
ImGui::End();
|
||||
|
||||
|
||||
ImGui::Begin("SceneView");
|
||||
unsigned int viewportWindowFlags = ImGuiWindowFlags_NoTitleBar
|
||||
| ImGuiWindowFlags_NoDecoration
|
||||
| ImGuiWindowFlags_NoScrollbar
|
||||
| ImGuiWindowFlags_NoMove
|
||||
| ImGuiWindowFlags_NoCollapse;
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2{ 0,0 });
|
||||
ImGui::Begin("SceneView",nullptr,viewportWindowFlags);
|
||||
spdlog::info( "Editor Resolution {0}x{1}", (float)ImGui::GetWindowWidth(),(float)ImGui::GetWindowHeight());
|
||||
|
||||
//ImGui::Image((ImTextureID)gameScreen.GetID(), gameScreen.getSize());
|
||||
ImGui::Image((ImTextureID)(intptr_t)renderer.getCurrentFrameBuffer().GetColourAttachment(),
|
||||
ImVec2{(float)ImGui::GetWindowWidth(),(float)ImGui::GetWindowHeight()});
|
||||
|
||||
ImGuizmo::Enable(true);
|
||||
ImGuizmo::SetOrthographic(false);
|
||||
@ -295,6 +353,15 @@ public:
|
||||
*/
|
||||
|
||||
ImGui::End();
|
||||
ImGui::PopStyleVar();
|
||||
|
||||
ImGui::Begin("EditorCamera");
|
||||
|
||||
ImGui::SliderFloat3("position", glm::value_ptr(cameraPosition), -50, 50);
|
||||
ImGui::End();
|
||||
|
||||
|
||||
|
||||
|
||||
ImGui::Begin(ICON_MD_MENU "SceneExplorer",nullptr);
|
||||
scene.getReg().each([&](entt::entity enttNumber) {
|
||||
@ -302,8 +369,11 @@ public:
|
||||
auto id = entity.GetComponent<YoggieEngine::IdentifierComponent>();
|
||||
if (ImGui::Selectable(id.name.c_str(), entity == Selected)) {
|
||||
Selected = YoggieEngine::Entity(enttNumber, &scene);
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
ImGui::End();
|
||||
|
||||
inspector.Update();
|
||||
@ -340,7 +410,9 @@ private:
|
||||
Scene scene;
|
||||
char* path = nullptr;
|
||||
Texture Logo;
|
||||
|
||||
Renderer renderer;
|
||||
Camera* camera = new EditorCamera();
|
||||
Mesh cube ;
|
||||
|
||||
void LoadLastOrEmptyProject() {
|
||||
// Check if there is a last known loaded project and
|
||||
|
@ -31,6 +31,11 @@ void Project::SaveProject(std::filesystem::path path, Project& project)
|
||||
|
||||
void Project::LoadProject(std::filesystem::path path, Project& project)
|
||||
{
|
||||
|
||||
if (!std::filesystem::exists(path)) {
|
||||
throw std::runtime_error("Couldn't find project file!");
|
||||
}
|
||||
|
||||
std::string YAMLProject;
|
||||
std::stringstream sstream;
|
||||
std::ifstream projectFile;
|
||||
@ -47,7 +52,7 @@ void Project::LoadProject(std::filesystem::path path, Project& project)
|
||||
// this is probably not perfect but it seems to work for now
|
||||
project = node.as<Project>();
|
||||
|
||||
std::cout << "loading..." << project.Name << std::endl;
|
||||
spdlog::info("loaded project {0}", project.Name);
|
||||
|
||||
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include "Inspector.h"
|
||||
#include "../TransformVec3.h"
|
||||
#include "../IconsMaterialDesign.h"
|
||||
|
||||
void Inspector::Draw()
|
||||
{
|
||||
@ -56,6 +57,28 @@ void Inspector::ShowComponents()
|
||||
if (selected.HasComponent<YoggieEngine::TransformComponent>()) {
|
||||
auto& transform = selected.GetComponent<YoggieEngine::TransformComponent>();
|
||||
if (ImGui::CollapsingHeader("Transform", ImGuiTreeNodeFlags_DefaultOpen)) {
|
||||
|
||||
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 1.0, 1.0f, 1.0f, 0.0f });
|
||||
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 1.0, 1.0f, 1.0f, 0.0f });
|
||||
ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 1.0, 1.0f, 1.0f, 0.0f });
|
||||
ImGui::SetCursorPosX(ImGui::GetContentRegionMax().x - 20);
|
||||
ImGui::Button(ICON_MD_SETTINGS, { 20,20 });
|
||||
ImGui::OpenPopupOnItemClick("##myContext", ImGuiPopupFlags_MouseButtonRight);
|
||||
if (ImGui::BeginPopupContextWindow("##myContext")) {
|
||||
if (ImGui::MenuItem("Reset")) {
|
||||
spdlog::info("Reset component");
|
||||
}
|
||||
if (ImGui::MenuItem("Copy Component")) {
|
||||
spdlog::info("Copy component");
|
||||
}
|
||||
|
||||
|
||||
ImGui::EndPopup();
|
||||
|
||||
}
|
||||
|
||||
ImGui::PopStyleColor(3);
|
||||
|
||||
/*
|
||||
ImGui::DragFloat3("Position", glm::value_ptr(transform.Position), 0.1f);
|
||||
ImGui::DragFloat3("Rotation", glm::value_ptr(transform.Rotation), 0.1f);
|
||||
|
Reference in New Issue
Block a user