Editor: 更新编辑器面板和UI控件系统

- 添加新的UI控件系统(Core.h, ScalarControls.h, VectorControls.h, UI.h)
- 更新SceneManager支持场景层级管理
- 优化SelectionManager选择管理
- 改进InspectorPanel/GameViewPanel/HierarchyPanel等面板
- 更新RHI文档说明Vulkan实现计划
This commit is contained in:
2026-03-24 20:02:38 +08:00
parent cab290b17d
commit 9fae910854
36 changed files with 757 additions and 148 deletions

View File

@@ -9,7 +9,8 @@
#include <XCEngine/Components/GameObject.h>
#include <XCEngine/Scene/Scene.h>
namespace UI {
namespace XCEngine {
namespace Editor {
class EditorSceneManager {
public:
@@ -18,58 +19,59 @@ public:
return instance;
}
XCEngine::Components::GameObject* CreateEntity(const std::string& name, XCEngine::Components::GameObject* parent = nullptr);
::XCEngine::Components::GameObject* CreateEntity(const std::string& name, ::XCEngine::Components::GameObject* parent = nullptr);
XCEngine::Components::GameObject* GetEntity(XCEngine::Components::GameObject::ID id) {
::XCEngine::Components::GameObject* GetEntity(::XCEngine::Components::GameObject::ID id) {
return m_scene ? m_scene->Find(std::to_string(id)) : nullptr;
}
const XCEngine::Components::GameObject* GetEntity(XCEngine::Components::GameObject::ID id) const {
const ::XCEngine::Components::GameObject* GetEntity(::XCEngine::Components::GameObject::ID id) const {
return m_scene ? m_scene->Find(std::to_string(id)) : nullptr;
}
const std::vector<XCEngine::Components::GameObject*>& GetRootEntities() const {
const std::vector<::XCEngine::Components::GameObject*>& GetRootEntities() const {
return m_rootEntities;
}
void DeleteEntity(XCEngine::Components::GameObject::ID id);
void DeleteEntity(::XCEngine::Components::GameObject::ID id);
void RenameEntity(XCEngine::Components::GameObject::ID id, const std::string& newName) {
void RenameEntity(::XCEngine::Components::GameObject::ID id, const std::string& newName) {
if (auto* entity = GetEntity(id)) {
entity->SetName(newName);
OnEntityChanged.Invoke(id);
}
}
void CopyEntity(XCEngine::Components::GameObject::ID id);
XCEngine::Components::GameObject::ID PasteEntity(XCEngine::Components::GameObject::ID parent = 0);
XCEngine::Components::GameObject::ID DuplicateEntity(XCEngine::Components::GameObject::ID id);
void MoveEntity(XCEngine::Components::GameObject::ID id, XCEngine::Components::GameObject::ID newParent);
void CopyEntity(::XCEngine::Components::GameObject::ID id);
::XCEngine::Components::GameObject::ID PasteEntity(::XCEngine::Components::GameObject::ID parent = 0);
::XCEngine::Components::GameObject::ID DuplicateEntity(::XCEngine::Components::GameObject::ID id);
void MoveEntity(::XCEngine::Components::GameObject::ID id, ::XCEngine::Components::GameObject::ID newParent);
void CreateDemoScene();
bool HasClipboardData() const { return m_clipboard.has_value(); }
XCEngine::Core::Event<XCEngine::Components::GameObject::ID> OnEntityCreated;
XCEngine::Core::Event<XCEngine::Components::GameObject::ID> OnEntityDeleted;
XCEngine::Core::Event<XCEngine::Components::GameObject::ID> OnEntityChanged;
XCEngine::Core::Event<> OnSceneChanged;
::XCEngine::Core::Event<::XCEngine::Components::GameObject::ID> OnEntityCreated;
::XCEngine::Core::Event<::XCEngine::Components::GameObject::ID> OnEntityDeleted;
::XCEngine::Core::Event<::XCEngine::Components::GameObject::ID> OnEntityChanged;
::XCEngine::Core::Event<> OnSceneChanged;
private:
EditorSceneManager() = default;
struct ClipboardData {
std::string name;
std::vector<std::unique_ptr<XCEngine::Components::Component>> components;
std::vector<std::unique_ptr<::XCEngine::Components::Component>> components;
std::vector<ClipboardData> children;
};
ClipboardData CopyEntityRecursive(const XCEngine::Components::GameObject* entity);
XCEngine::Components::GameObject::ID PasteEntityRecursive(const ClipboardData& data, XCEngine::Components::GameObject::ID parent);
ClipboardData CopyEntityRecursive(const ::XCEngine::Components::GameObject* entity);
::XCEngine::Components::GameObject::ID PasteEntityRecursive(const ClipboardData& data, ::XCEngine::Components::GameObject::ID parent);
XCEngine::Components::Scene* m_scene = nullptr;
std::vector<XCEngine::Components::GameObject*> m_rootEntities;
::XCEngine::Components::Scene* m_scene = nullptr;
std::vector<::XCEngine::Components::GameObject*> m_rootEntities;
std::optional<ClipboardData> m_clipboard;
};
}
}