重构UI架构:分离数据模型和显示逻辑
- 新增 Core 模块:GameObject、LogEntry、AssetItem 数据模型 - 新增 Managers 模块:SceneManager、LogSystem、ProjectManager - Panel 层只负责显示,不再持有数据 - 解耦 HierarchyPanel 和 InspectorPanel 之间的直接依赖
This commit is contained in:
19
ui/src/Managers/LogSystem.cpp
Normal file
19
ui/src/Managers/LogSystem.cpp
Normal file
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
26
ui/src/Managers/LogSystem.h
Normal file
26
ui/src/Managers/LogSystem.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
#include "Core/LogEntry.h"
|
||||
#include <vector>
|
||||
#include <functional>
|
||||
|
||||
namespace UI {
|
||||
|
||||
class LogSystem {
|
||||
public:
|
||||
static LogSystem& Get();
|
||||
|
||||
void AddLog(LogEntry::Level level, const std::string& message);
|
||||
void Clear();
|
||||
const std::vector<LogEntry>& GetLogs() const { return m_logs; }
|
||||
|
||||
void SetCallback(std::function<void()> callback) { m_callback = callback; }
|
||||
|
||||
private:
|
||||
LogSystem() = default;
|
||||
|
||||
std::vector<LogEntry> m_logs;
|
||||
std::function<void()> m_callback;
|
||||
};
|
||||
|
||||
}
|
||||
23
ui/src/Managers/ProjectManager.cpp
Normal file
23
ui/src/Managers/ProjectManager.cpp
Normal file
@@ -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},
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
26
ui/src/Managers/ProjectManager.h
Normal file
26
ui/src/Managers/ProjectManager.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
#include "Core/AssetItem.h"
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
namespace UI {
|
||||
|
||||
class ProjectManager {
|
||||
public:
|
||||
static ProjectManager& Get();
|
||||
|
||||
std::vector<AssetItem>& GetItems() { return m_items; }
|
||||
int GetSelectedIndex() const { return m_selectedIndex; }
|
||||
void SetSelectedIndex(int index) { m_selectedIndex = index; }
|
||||
|
||||
void CreateDemoAssets();
|
||||
|
||||
private:
|
||||
ProjectManager() = default;
|
||||
|
||||
std::vector<AssetItem> m_items;
|
||||
int m_selectedIndex = -1;
|
||||
};
|
||||
|
||||
}
|
||||
47
ui/src/Managers/SceneManager.cpp
Normal file
47
ui/src/Managers/SceneManager.cpp
Normal file
@@ -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<TransformComponent>();
|
||||
|
||||
GameObject directionalLight("Directional Light");
|
||||
|
||||
GameObject cube("Cube");
|
||||
cube.AddComponent<TransformComponent>();
|
||||
cube.AddComponent<MeshRendererComponent>()->meshName = "Cube Mesh";
|
||||
|
||||
GameObject sphere("Sphere");
|
||||
sphere.AddComponent<TransformComponent>();
|
||||
sphere.AddComponent<MeshRendererComponent>()->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));
|
||||
}
|
||||
|
||||
}
|
||||
25
ui/src/Managers/SceneManager.h
Normal file
25
ui/src/Managers/SceneManager.h
Normal file
@@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
|
||||
#include "Core/GameObject.h"
|
||||
#include <vector>
|
||||
|
||||
namespace UI {
|
||||
|
||||
class SceneManager {
|
||||
public:
|
||||
static SceneManager& Get();
|
||||
|
||||
std::vector<GameObject>& GetRootObjects() { return m_rootObjects; }
|
||||
GameObject* GetSelectedObject() { return m_selectedObject; }
|
||||
void SetSelectedObject(GameObject* obj);
|
||||
|
||||
void CreateDemoScene();
|
||||
|
||||
private:
|
||||
SceneManager() = default;
|
||||
|
||||
std::vector<GameObject> m_rootObjects;
|
||||
GameObject* m_selectedObject = nullptr;
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user