#include "widgets.h" #include "EditorConsole.h" #include #include "../../YoggieEngine/src/Scene/Components.h" #include "../../YoggieEngine/src/Scene/Entity.h" class Editor; void ComponentView(const std::string& componentName, voidFunction func) { ImGuiWindowFlags_ window_flags = ImGuiWindowFlags_None; ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, 5.0f); ImGui::BeginChild(componentName.c_str()); func(); ImGui::EndChild(); ImGui::PopStyleVar(); } void Inspector(entt::entity ent , Scene& scene) { ImGui::Begin("Inspector"); static char* names[] = { "Script Component", "Camera Component" }; static float Zoom = 90; static glm::vec3 Position = glm::vec3(0.0f, 0.0f, 0.0f); static glm::vec3 Rotation = glm::vec3(0.0f, 0.0f, 0.0f); if (scene.getReg().valid(ent)) { Entity entity = Entity(ent, &scene); auto component = entity.GetComponent(); ImGui::LabelText("## Name:", component.name.c_str()); if (ImGui::Button("Add Component")) ImGui::OpenPopup("Component picker"); ImGui::SameLine(); if (ImGui::BeginPopup("Component picker")) { for (int i = 0; i < IM_ARRAYSIZE(names); i++) if (ImGui::MenuItem(names[i])) { std::cout << "Add a " << names[i] << " to " << entity.GetComponent().name << std::endl; } ImGui::EndPopup(); } ImGui::NewLine(); if (entity.HasComponent()) { auto& transform = entity.GetComponent(); if (ImGui::CollapsingHeader("Transform", ImGuiTreeNodeFlags_None )) { ImGui::DragFloat3("Position", glm::value_ptr(transform.Position), 0.01); ImGui::DragFloat3("Rotation", glm::value_ptr(transform.Rotation), 0.01); ImGui::DragFloat3("Scale", glm::value_ptr(transform.Scale), 0.01, 0); } } if (entity.HasComponent()) { auto& light = entity.GetComponent(); ImGui::DragFloat("Strength", &light.Strength, 0.001f); ImGui::ColorEdit3("Colour", glm::value_ptr(light.Color)); } if (entity.HasComponent ()) { auto& camera = entity.GetComponent(); ComponentView("Camera", [] { ImGui::SliderFloat("Zoom", &Zoom, 10, 190); ImGui::InputFloat3("Position:", &Position[0]); ImGui::InputFloat3("Rotation:", &Rotation[0]); }); } if (entity.HasComponent()) { ComponentView("Scripting", [] { ImGui::LabelText("##--", "Hello scripting"); }); } } ImGui::End(); } void SceneExplorer(entt::entity& selected, Scene& scene ) { ImGui::Begin("Scene Explorer"); scene.getReg().each([&](entt::entity enttNumber) { Entity entity = Entity(enttNumber, &scene); auto id = entity.GetComponent(); if (ImGui::Selectable(id.name.c_str(), enttNumber == selected )) { selected = enttNumber; } }); ImGui::End(); } void Viewport(Framebuffer& framebuffer, Scene& scene) { unsigned int viewportWindowFlags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse; ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2{ 0,0 }); ImGui::Begin("Viewport", false, viewportWindowFlags); ImGui::Image((void*)(intptr_t)framebuffer.GetColourAttachment(), ImVec2{ (float)800,(float)600 }); ImGuizmo::SetDrawlist(); ImGuizmo::SetRect(ImGui::GetWindowPos().x, ImGui::GetWindowPos().y, ImGui::GetWindowWidth(), ImGui::GetWindowHeight()); ImGuizmo::Enable(true); auto cam = glm::mat4(1.0f); auto eye = glm::vec3(0.0f); auto center = glm::vec3(0.0f); auto up = glm::vec3(0.0f, 1.0f, 0.0f); auto view = glm::lookAt(eye, center, up); glm::mat4 projection = glm::perspective(glm::radians(90.0f), (800.0f / 600.0f), 0.001f, 100.0f); auto transformMatrix = glm::mat4(1.0f); ImGuizmo::Manipulate(glm::value_ptr(view), glm::value_ptr(projection), ImGuizmo::TRANSLATE, ImGuizmo::WORLD, glm::value_ptr(transformMatrix)); //ImGuizmo::Manipulate(glm::value_ptr(static_cam), glm::value_ptr(static_projection), ImGuizmo::TRANSLATE, ImGuizmo::WORLD, glm::value_ptr(trans)); ImGuizmo::ViewManipulate(glm::value_ptr(cam), 8.0f, ImVec2{ 0.0f,0.0f }, ImVec2{ 128.0f,128.0f }, 0x10101010); ImGui::End(); ImGui::PopStyleVar(); } void Settings() { ImGui::Begin("Settings"); ImGui::LabelText("##title-settings", "Fine grain control over your engine... "); ImGui::End(); } auto console = EditorConsole(); void Console() { ImGui::Begin("Console", false); console.Draw(); ImGui::End(); } void AssetsFinder() { ImGui::Begin("Asset-Finder", false); ImGui::Dummy(ImVec2{ 128, 128 }); ImGui::End(); }