From a2f3db87186ea467bc182d1a013a6cde2d5d80c8 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Thu, 12 Mar 2026 16:13:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84UI=E6=9E=B6=E6=9E=84=EF=BC=9A?= =?UTF-8?q?=E5=88=86=E7=A6=BB=E6=95=B0=E6=8D=AE=E6=A8=A1=E5=9E=8B=E5=92=8C?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Core 模块:GameObject、LogEntry、AssetItem 数据模型 - 新增 Managers 模块:SceneManager、LogSystem、ProjectManager - Panel 层只负责显示,不再持有数据 - 解耦 HierarchyPanel 和 InspectorPanel 之间的直接依赖 --- ui/CMakeLists.txt | 3 ++ ui/src/Application.cpp | 2 - ui/src/Core/AssetItem.h | 13 +++++++ ui/src/Core/GameObject.h | 61 ++++++++++++++++++++++++++++++ ui/src/Core/LogEntry.h | 13 +++++++ ui/src/Managers/LogSystem.cpp | 19 ++++++++++ ui/src/Managers/LogSystem.h | 26 +++++++++++++ ui/src/Managers/ProjectManager.cpp | 23 +++++++++++ ui/src/Managers/ProjectManager.h | 26 +++++++++++++ ui/src/Managers/SceneManager.cpp | 47 +++++++++++++++++++++++ ui/src/Managers/SceneManager.h | 25 ++++++++++++ ui/src/panels/ConsolePanel.cpp | 31 ++++++--------- ui/src/panels/ConsolePanel.h | 12 ------ ui/src/panels/HierarchyPanel.cpp | 38 +++---------------- ui/src/panels/HierarchyPanel.h | 16 +------- ui/src/panels/InspectorPanel.cpp | 36 ++++++++++-------- ui/src/panels/InspectorPanel.h | 12 +----- ui/src/panels/ProjectPanel.cpp | 26 +++++-------- ui/src/panels/ProjectPanel.h | 14 +------ 19 files changed, 306 insertions(+), 137 deletions(-) create mode 100644 ui/src/Core/AssetItem.h create mode 100644 ui/src/Core/GameObject.h create mode 100644 ui/src/Core/LogEntry.h create mode 100644 ui/src/Managers/LogSystem.cpp create mode 100644 ui/src/Managers/LogSystem.h create mode 100644 ui/src/Managers/ProjectManager.cpp create mode 100644 ui/src/Managers/ProjectManager.h create mode 100644 ui/src/Managers/SceneManager.cpp create mode 100644 ui/src/Managers/SceneManager.h diff --git a/ui/CMakeLists.txt b/ui/CMakeLists.txt index d93ee4ce..a354df3c 100644 --- a/ui/CMakeLists.txt +++ b/ui/CMakeLists.txt @@ -32,6 +32,9 @@ add_executable(${PROJECT_NAME} WIN32 src/main.cpp src/Application.cpp src/Theme.cpp + src/Managers/SceneManager.cpp + src/Managers/LogSystem.cpp + src/Managers/ProjectManager.cpp src/panels/Panel.cpp src/panels/MenuBar.cpp src/panels/HierarchyPanel.cpp diff --git a/ui/src/Application.cpp b/ui/src/Application.cpp index ce71c8df..98a1c9d8 100644 --- a/ui/src/Application.cpp +++ b/ui/src/Application.cpp @@ -48,8 +48,6 @@ bool Application::Initialize(HWND hwnd) { m_consolePanel = std::make_unique(); m_projectPanel = std::make_unique(); - m_inspectorPanel->SetHierarchyPanel(m_hierarchyPanel.get()); - return true; } diff --git a/ui/src/Core/AssetItem.h b/ui/src/Core/AssetItem.h new file mode 100644 index 00000000..bbcf9271 --- /dev/null +++ b/ui/src/Core/AssetItem.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +namespace UI { + +struct AssetItem { + std::string name; + std::string type; + bool isFolder; +}; + +} \ No newline at end of file diff --git a/ui/src/Core/GameObject.h b/ui/src/Core/GameObject.h new file mode 100644 index 00000000..852208fc --- /dev/null +++ b/ui/src/Core/GameObject.h @@ -0,0 +1,61 @@ +#pragma once + +#include +#include +#include + +namespace UI { + +class Component { +public: + virtual ~Component() = default; + virtual std::string GetName() const = 0; +}; + +class TransformComponent : public Component { +public: + float position[3] = {0.0f, 0.0f, 0.0f}; + float rotation[3] = {0.0f, 0.0f, 0.0f}; + float scale[3] = {1.0f, 1.0f, 1.0f}; + + std::string GetName() const override { return "Transform"; } +}; + +class MeshRendererComponent : public Component { +public: + std::string materialName = "Default-Material"; + std::string meshName = ""; + + std::string GetName() const override { return "Mesh Renderer"; } +}; + +class GameObject { +public: + std::string name; + std::vector children; + std::vector> components; + bool selected = false; + + GameObject() = default; + explicit GameObject(const std::string& n) : name(n) {} + + template + T* AddComponent(Args&&... args) { + auto comp = std::make_unique(std::forward(args)...); + T* ptr = comp.get(); + components.push_back(std::move(comp)); + return ptr; + } + + template + T* GetComponent() { + for (auto& comp : components) { + if (auto casted = dynamic_cast(comp.get())) { + return casted; + } + } + return nullptr; + } +}; + +} \ No newline at end of file diff --git a/ui/src/Core/LogEntry.h b/ui/src/Core/LogEntry.h new file mode 100644 index 00000000..e4218f09 --- /dev/null +++ b/ui/src/Core/LogEntry.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +namespace UI { + +struct LogEntry { + enum class Level { Info, Warning, Error }; + Level level; + std::string message; +}; + +} \ No newline at end of file diff --git a/ui/src/Managers/LogSystem.cpp b/ui/src/Managers/LogSystem.cpp new file mode 100644 index 00000000..a0e06dcc --- /dev/null +++ b/ui/src/Managers/LogSystem.cpp @@ -0,0 +1,19 @@ +#include "LogSystem.h" + +namespace UI { + +LogSystem& LogSystem::Get() { + static LogSystem instance; + return instance; +} + +void LogSystem::AddLog(LogEntry::Level level, const std::string& message) { + m_logs.push_back({level, message}); + if (m_callback) m_callback(); +} + +void LogSystem::Clear() { + m_logs.clear(); +} + +} \ No newline at end of file diff --git a/ui/src/Managers/LogSystem.h b/ui/src/Managers/LogSystem.h new file mode 100644 index 00000000..b480e907 --- /dev/null +++ b/ui/src/Managers/LogSystem.h @@ -0,0 +1,26 @@ +#pragma once + +#include "Core/LogEntry.h" +#include +#include + +namespace UI { + +class LogSystem { +public: + static LogSystem& Get(); + + void AddLog(LogEntry::Level level, const std::string& message); + void Clear(); + const std::vector& GetLogs() const { return m_logs; } + + void SetCallback(std::function callback) { m_callback = callback; } + +private: + LogSystem() = default; + + std::vector m_logs; + std::function m_callback; +}; + +} \ No newline at end of file diff --git a/ui/src/Managers/ProjectManager.cpp b/ui/src/Managers/ProjectManager.cpp new file mode 100644 index 00000000..f2affc1d --- /dev/null +++ b/ui/src/Managers/ProjectManager.cpp @@ -0,0 +1,23 @@ +#include "ProjectManager.h" + +namespace UI { + +ProjectManager& ProjectManager::Get() { + static ProjectManager instance; + return instance; +} + +void ProjectManager::CreateDemoAssets() { + m_items = { + {"Cube", "Prefab", false}, + {"Sphere", "Prefab", false}, + {"Player", "Prefab", false}, + {"MainScript", "Script", false}, + {"DefaultMat", "Material", false}, + {"Scene1", "Scene", false}, + {"Textures", "Folder", true}, + {"Models", "Folder", true}, + }; +} + +} \ No newline at end of file diff --git a/ui/src/Managers/ProjectManager.h b/ui/src/Managers/ProjectManager.h new file mode 100644 index 00000000..b7e664f2 --- /dev/null +++ b/ui/src/Managers/ProjectManager.h @@ -0,0 +1,26 @@ +#pragma once + +#include "Core/AssetItem.h" +#include +#include + +namespace UI { + +class ProjectManager { +public: + static ProjectManager& Get(); + + std::vector& GetItems() { return m_items; } + int GetSelectedIndex() const { return m_selectedIndex; } + void SetSelectedIndex(int index) { m_selectedIndex = index; } + + void CreateDemoAssets(); + +private: + ProjectManager() = default; + + std::vector m_items; + int m_selectedIndex = -1; +}; + +} \ No newline at end of file diff --git a/ui/src/Managers/SceneManager.cpp b/ui/src/Managers/SceneManager.cpp new file mode 100644 index 00000000..1f04250c --- /dev/null +++ b/ui/src/Managers/SceneManager.cpp @@ -0,0 +1,47 @@ +#include "SceneManager.h" + +namespace UI { + +SceneManager& SceneManager::Get() { + static SceneManager instance; + return instance; +} + +void SceneManager::SetSelectedObject(GameObject* obj) { + if (m_selectedObject) { + m_selectedObject->selected = false; + } + m_selectedObject = obj; + if (m_selectedObject) { + m_selectedObject->selected = true; + } +} + +void SceneManager::CreateDemoScene() { + m_rootObjects.clear(); + + GameObject mainCamera("Main Camera"); + mainCamera.AddComponent(); + + GameObject directionalLight("Directional Light"); + + GameObject cube("Cube"); + cube.AddComponent(); + cube.AddComponent()->meshName = "Cube Mesh"; + + GameObject sphere("Sphere"); + sphere.AddComponent(); + sphere.AddComponent()->meshName = "Sphere Mesh"; + + GameObject player("Player"); + GameObject weapon("Weapon"); + player.children.push_back(std::move(weapon)); + + m_rootObjects.push_back(std::move(mainCamera)); + m_rootObjects.push_back(std::move(directionalLight)); + m_rootObjects.push_back(std::move(cube)); + m_rootObjects.push_back(std::move(sphere)); + m_rootObjects.push_back(std::move(player)); +} + +} \ No newline at end of file diff --git a/ui/src/Managers/SceneManager.h b/ui/src/Managers/SceneManager.h new file mode 100644 index 00000000..24bc7e0b --- /dev/null +++ b/ui/src/Managers/SceneManager.h @@ -0,0 +1,25 @@ +#pragma once + +#include "Core/GameObject.h" +#include + +namespace UI { + +class SceneManager { +public: + static SceneManager& Get(); + + std::vector& GetRootObjects() { return m_rootObjects; } + GameObject* GetSelectedObject() { return m_selectedObject; } + void SetSelectedObject(GameObject* obj); + + void CreateDemoScene(); + +private: + SceneManager() = default; + + std::vector m_rootObjects; + GameObject* m_selectedObject = nullptr; +}; + +} \ No newline at end of file diff --git a/ui/src/panels/ConsolePanel.cpp b/ui/src/panels/ConsolePanel.cpp index 12077229..73544d48 100644 --- a/ui/src/panels/ConsolePanel.cpp +++ b/ui/src/panels/ConsolePanel.cpp @@ -1,40 +1,42 @@ #include "ConsolePanel.h" +#include "Managers/LogSystem.h" +#include "Core/LogEntry.h" #include namespace UI { ConsolePanel::ConsolePanel() : Panel("Console") { - m_logs.push_back({LogEntry::Level::Info, "Engine initialized successfully"}); - m_logs.push_back({LogEntry::Level::Info, "Loading default scene..."}); - m_logs.push_back({LogEntry::Level::Warning, "Missing material on object 'Cube'"}); - m_logs.push_back({LogEntry::Level::Error, "Failed to load texture: 'Assets/Textures/missing.png'"}); - m_logs.push_back({LogEntry::Level::Info, "Scene loaded successfully"}); + LogSystem::Get().AddLog(LogEntry::Level::Info, "Engine initialized successfully"); + LogSystem::Get().AddLog(LogEntry::Level::Info, "Loading default scene..."); + LogSystem::Get().AddLog(LogEntry::Level::Warning, "Missing material on object 'Cube'"); + LogSystem::Get().AddLog(LogEntry::Level::Error, "Failed to load texture: 'Assets/Textures/missing.png'"); + LogSystem::Get().AddLog(LogEntry::Level::Info, "Scene loaded successfully"); } void ConsolePanel::Render() { ImGui::Begin(m_name.c_str(), &m_isOpen, ImGuiWindowFlags_None); if (ImGui::Button("Clear")) { - Clear(); + LogSystem::Get().Clear(); } ImGui::SameLine(); if (ImGui::Button("Info")) { - AddLog(LogEntry::Level::Info, "Test info message"); + LogSystem::Get().AddLog(LogEntry::Level::Info, "Test info message"); } ImGui::SameLine(); if (ImGui::Button("Warn")) { - AddLog(LogEntry::Level::Warning, "Test warning message"); + LogSystem::Get().AddLog(LogEntry::Level::Warning, "Test warning message"); } ImGui::SameLine(); if (ImGui::Button("Error")) { - AddLog(LogEntry::Level::Error, "Test error message"); + LogSystem::Get().AddLog(LogEntry::Level::Error, "Test error message"); } ImGui::Separator(); ImGui::BeginChild("LogScroll", ImVec2(0, 0), false, ImGuiWindowFlags_HorizontalScrollbar); - for (const auto& log : m_logs) { + for (const auto& log : LogSystem::Get().GetLogs()) { ImVec4 color; const char* prefix; @@ -65,13 +67,4 @@ void ConsolePanel::Render() { ImGui::End(); } -void ConsolePanel::AddLog(LogEntry::Level level, const std::string& message) { - m_logs.push_back({level, message}); - m_scrollToBottom = true; -} - -void ConsolePanel::Clear() { - m_logs.clear(); -} - } \ No newline at end of file diff --git a/ui/src/panels/ConsolePanel.h b/ui/src/panels/ConsolePanel.h index a1e0ded3..4d73ef58 100644 --- a/ui/src/panels/ConsolePanel.h +++ b/ui/src/panels/ConsolePanel.h @@ -1,27 +1,15 @@ #pragma once #include "Panel.h" -#include -#include namespace UI { -struct LogEntry { - enum class Level { Info, Warning, Error }; - Level level; - std::string message; -}; - class ConsolePanel : public Panel { public: ConsolePanel(); void Render() override; - void AddLog(LogEntry::Level level, const std::string& message); private: - void Clear(); - - std::vector m_logs; bool m_scrollToBottom = false; }; diff --git a/ui/src/panels/HierarchyPanel.cpp b/ui/src/panels/HierarchyPanel.cpp index 113b4d78..ef2a9e31 100644 --- a/ui/src/panels/HierarchyPanel.cpp +++ b/ui/src/panels/HierarchyPanel.cpp @@ -1,42 +1,18 @@ #include "HierarchyPanel.h" +#include "Managers/SceneManager.h" +#include "Core/GameObject.h" #include namespace UI { HierarchyPanel::HierarchyPanel() : Panel("Hierarchy") { - InitDemoData(); -} - -void HierarchyPanel::InitDemoData() { - GameObject mainCamera; - mainCamera.name = "Main Camera"; - - GameObject directionalLight; - directionalLight.name = "Directional Light"; - - GameObject cube; - cube.name = "Cube"; - - GameObject sphere; - sphere.name = "Sphere"; - - GameObject player; - player.name = "Player"; - GameObject weapon; - weapon.name = "Weapon"; - player.children.push_back(weapon); - - m_rootObjects.push_back(mainCamera); - m_rootObjects.push_back(directionalLight); - m_rootObjects.push_back(cube); - m_rootObjects.push_back(sphere); - m_rootObjects.push_back(player); + SceneManager::Get().CreateDemoScene(); } void HierarchyPanel::Render() { ImGui::Begin(m_name.c_str(), &m_isOpen, ImGuiWindowFlags_None); - for (auto& obj : m_rootObjects) { + for (auto& obj : SceneManager::Get().GetRootObjects()) { RenderGameObject(obj); } @@ -57,11 +33,7 @@ void HierarchyPanel::RenderGameObject(GameObject& obj) { bool isOpen = ImGui::TreeNodeEx(obj.name.c_str(), flags); if (ImGui::IsItemClicked() && !ImGui::IsItemToggledOpen()) { - if (m_selectedObject) { - m_selectedObject->selected = false; - } - obj.selected = true; - m_selectedObject = &obj; + SceneManager::Get().SetSelectedObject(&obj); } if (isOpen) { diff --git a/ui/src/panels/HierarchyPanel.h b/ui/src/panels/HierarchyPanel.h index 40df5bd8..39ee9978 100644 --- a/ui/src/panels/HierarchyPanel.h +++ b/ui/src/panels/HierarchyPanel.h @@ -1,30 +1,16 @@ #pragma once #include "Panel.h" -#include -#include namespace UI { -struct GameObject { - std::string name; - std::vector children; - bool isOpen = false; - bool selected = false; -}; - class HierarchyPanel : public Panel { public: HierarchyPanel(); void Render() override; - GameObject* GetSelectedObject() { return m_selectedObject; } private: - void RenderGameObject(GameObject& obj); - void InitDemoData(); - - std::vector m_rootObjects; - GameObject* m_selectedObject = nullptr; + void RenderGameObject(class GameObject& obj); }; } \ No newline at end of file diff --git a/ui/src/panels/InspectorPanel.cpp b/ui/src/panels/InspectorPanel.cpp index 3fb2ed1b..523302a8 100644 --- a/ui/src/panels/InspectorPanel.cpp +++ b/ui/src/panels/InspectorPanel.cpp @@ -1,4 +1,6 @@ #include "InspectorPanel.h" +#include "Managers/SceneManager.h" +#include "Core/GameObject.h" #include namespace UI { @@ -8,18 +10,22 @@ InspectorPanel::InspectorPanel() : Panel("Inspector") {} void InspectorPanel::Render() { ImGui::Begin(m_name.c_str(), &m_isOpen, ImGuiWindowFlags_None); - GameObject* selected = nullptr; - if (m_hierarchyPanel) { - selected = m_hierarchyPanel->GetSelectedObject(); - } + GameObject* selected = SceneManager::Get().GetSelectedObject(); if (selected) { ImGui::Text("%s", selected->name.c_str()); ImGui::Separator(); - RenderTransformSection(); - ImGui::Separator(); - RenderMeshRendererSection(); + auto transform = selected->GetComponent(); + if (transform) { + RenderTransformSection(transform); + ImGui::Separator(); + } + + auto meshRenderer = selected->GetComponent(); + if (meshRenderer) { + RenderMeshRendererSection(meshRenderer); + } } else { ImGui::Text("No object selected"); ImGui::TextColored(ImVec4(0.5f, 0.5f, 0.5f, 1.0f), "Select an object in Hierarchy"); @@ -28,44 +34,42 @@ void InspectorPanel::Render() { ImGui::End(); } -void InspectorPanel::RenderTransformSection() { +void InspectorPanel::RenderTransformSection(TransformComponent* transform) { if (ImGui::CollapsingHeader("Transform", ImGuiTreeNodeFlags_DefaultOpen)) { ImGui::Indent(10.0f); ImGui::Text("Position"); ImGui::SameLine(80); ImGui::SetNextItemWidth(180); - ImGui::DragFloat3("##Position", m_position, 0.1f); + ImGui::DragFloat3("##Position", transform->position, 0.1f); ImGui::Text("Rotation"); ImGui::SameLine(80); ImGui::SetNextItemWidth(180); - ImGui::DragFloat3("##Rotation", m_rotation, 1.0f); + ImGui::DragFloat3("##Rotation", transform->rotation, 1.0f); ImGui::Text("Scale"); ImGui::SameLine(80); ImGui::SetNextItemWidth(180); - ImGui::DragFloat3("##Scale", m_scale, 0.1f); + ImGui::DragFloat3("##Scale", transform->scale, 0.1f); ImGui::Unindent(10.0f); } } -void InspectorPanel::RenderMeshRendererSection() { +void InspectorPanel::RenderMeshRendererSection(MeshRendererComponent* meshRenderer) { if (ImGui::CollapsingHeader("Mesh Renderer", ImGuiTreeNodeFlags_DefaultOpen)) { ImGui::Indent(10.0f); ImGui::Text("Material"); ImGui::SameLine(80); ImGui::SetNextItemWidth(180); - static char materialName[64] = "Default-Material"; - ImGui::InputText("##Material", materialName, sizeof(materialName)); + ImGui::InputText("##Material", meshRenderer->materialName.data(), meshRenderer->materialName.capacity()); ImGui::Text("Mesh"); ImGui::SameLine(80); ImGui::SetNextItemWidth(180); - static char meshName[64] = "Cube Mesh"; - ImGui::InputText("##Mesh", meshName, sizeof(meshName)); + ImGui::InputText("##Mesh", meshRenderer->meshName.data(), meshRenderer->meshName.capacity()); ImGui::Unindent(10.0f); } diff --git a/ui/src/panels/InspectorPanel.h b/ui/src/panels/InspectorPanel.h index 2c3a4fd5..f2888b0c 100644 --- a/ui/src/panels/InspectorPanel.h +++ b/ui/src/panels/InspectorPanel.h @@ -1,7 +1,6 @@ #pragma once #include "Panel.h" -#include "HierarchyPanel.h" namespace UI { @@ -9,17 +8,10 @@ class InspectorPanel : public Panel { public: InspectorPanel(); void Render() override; - void SetHierarchyPanel(HierarchyPanel* panel) { m_hierarchyPanel = panel; } private: - void RenderTransformSection(); - void RenderMeshRendererSection(); - - HierarchyPanel* m_hierarchyPanel = nullptr; - - float m_position[3] = {0.0f, 1.0f, -10.0f}; - float m_rotation[3] = {0.0f, 0.0f, 0.0f}; - float m_scale[3] = {1.0f, 1.0f, 1.0f}; + void RenderTransformSection(class TransformComponent* transform); + void RenderMeshRendererSection(class MeshRendererComponent* meshRenderer); }; } \ No newline at end of file diff --git a/ui/src/panels/ProjectPanel.cpp b/ui/src/panels/ProjectPanel.cpp index e091d055..fd65c791 100644 --- a/ui/src/panels/ProjectPanel.cpp +++ b/ui/src/panels/ProjectPanel.cpp @@ -1,22 +1,13 @@ #include "ProjectPanel.h" +#include "Managers/ProjectManager.h" +#include "Core/AssetItem.h" #include #include namespace UI { ProjectPanel::ProjectPanel() : Panel("Project") { - m_folders = {"Assets", "Scenes", "Scripts", "Materials", "Prefabs"}; - - m_items = { - {"Cube", "Prefab", false}, - {"Sphere", "Prefab", false}, - {"Player", "Prefab", false}, - {"MainScript", "Script", false}, - {"DefaultMat", "Material", false}, - {"Scene1", "Scene", false}, - {"Textures", "Folder", true}, - {"Models", "Folder", true}, - }; + ProjectManager::Get().CreateDemoAssets(); } void ProjectPanel::Render() { @@ -37,11 +28,12 @@ void ProjectPanel::Render() { int columns = (int)(panelWidth / (buttonWidth + padding)); if (columns < 1) columns = 1; - for (int i = 0; i < m_items.size(); i++) { + auto& items = ProjectManager::Get().GetItems(); + for (int i = 0; i < items.size(); i++) { if (i > 0 && i % columns != 0) { ImGui::SameLine(); } - RenderAssetItem(m_items[i], i); + RenderAssetItem(items[i], i); } ImGui::EndChild(); @@ -51,14 +43,14 @@ void ProjectPanel::Render() { void ProjectPanel::RenderAssetItem(const AssetItem& item, int index) { ImGui::PushID(index); - bool isSelected = (m_selectedIndex == index); + bool isSelected = (ProjectManager::Get().GetSelectedIndex() == index); if (isSelected) { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.26f, 0.59f, 0.98f, 0.40f)); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.40f, 0.40f, 0.40f, 0.50f)); } ImVec2 buttonSize(80.0f, 90.0f); if (ImGui::Button("##Asset", buttonSize)) { - m_selectedIndex = index; + ProjectManager::Get().SetSelectedIndex(index); } if (isSelected) { diff --git a/ui/src/panels/ProjectPanel.h b/ui/src/panels/ProjectPanel.h index 06f9aa8c..cddc1607 100644 --- a/ui/src/panels/ProjectPanel.h +++ b/ui/src/panels/ProjectPanel.h @@ -1,28 +1,16 @@ #pragma once #include "Panel.h" -#include -#include namespace UI { -struct AssetItem { - std::string name; - std::string type; - bool isFolder; -}; - class ProjectPanel : public Panel { public: ProjectPanel(); void Render() override; private: - void RenderAssetItem(const AssetItem& item, int index); - - std::vector m_folders; - std::vector m_items; - int m_selectedIndex = -1; + void RenderAssetItem(const struct AssetItem& item, int index); }; } \ No newline at end of file