#include "InspectorPanel.h" #include "Managers/SceneManager.h" #include "Managers/SelectionManager.h" #include "UI/UI.h" #include #include namespace XCEngine { namespace Editor { InspectorPanel::InspectorPanel() : Panel("Inspector") { m_selectionHandlerId = SelectionManager::Get().OnSelectionChanged.Subscribe([this](uint64_t) { }); } InspectorPanel::~InspectorPanel() { SelectionManager::Get().OnSelectionChanged.Unsubscribe(m_selectionHandlerId); } void InspectorPanel::Render() { ImGui::Begin(m_name.c_str(), nullptr, ImGuiWindowFlags_None); ::XCEngine::Components::GameObject* entity = SelectionManager::Get().GetSelectedEntity(); if (entity) { RenderEntity(entity); } else { ImGui::Text("No object selected"); ImGui::TextColored(ImVec4(0.5f, 0.5f, 0.5f, 1.0f), "Select an object in Hierarchy"); } ImGui::End(); } void InspectorPanel::RenderEntity(::XCEngine::Components::GameObject* entity) { ImGui::Text("%s", entity->GetName().c_str()); ImGui::Separator(); auto components = entity->GetComponents<::XCEngine::Components::Component>(); for (auto* component : components) { RenderComponent(component); ImGui::Separator(); } } void InspectorPanel::RenderComponent(::XCEngine::Components::Component* component) { if (!component) return; const char* name = component->GetName().c_str(); std::string headerId = std::string(name) + "##" + std::to_string(reinterpret_cast(component)); if (ImGui::CollapsingHeader(headerId.c_str(), ImGuiTreeNodeFlags_DefaultOpen)) { ImGui::Indent(10.0f); if (auto* transform = dynamic_cast<::XCEngine::Components::TransformComponent*>(component)) { ::XCEngine::Math::Vector3 position = transform->GetLocalPosition(); ::XCEngine::Math::Vector3 rotation = transform->GetLocalEulerAngles(); ::XCEngine::Math::Vector3 scale = transform->GetLocalScale(); if (UI::DrawVec3("Position", position, 0.0f, 80.0f, 0.1f)) { transform->SetLocalPosition(position); } if (UI::DrawVec3("Rotation", rotation, 0.0f, 80.0f, 1.0f)) { transform->SetLocalEulerAngles(rotation); } if (UI::DrawVec3("Scale", scale, 1.0f, 80.0f, 0.1f)) { transform->SetLocalScale(scale); } } ImGui::Unindent(10.0f); } } } }