Files
XCEngine/editor/src/panels/InspectorPanel.h

81 lines
2.5 KiB
C++

#pragma once
#include "MaterialInspectorMaterialState.h"
#include "Panel.h"
#include "Core/AssetItem.h"
#include "Core/EditorActionRoute.h"
#include "UI/PopupState.h"
#include <XCEngine/Core/Asset/ResourceHandle.h>
#include <XCEngine/Resources/Material/Material.h>
#include <array>
#include <cstdint>
#include <functional>
#include <string>
#include <vector>
namespace XCEngine {
namespace Components {
class Component;
class GameObject;
}
namespace Editor {
class InspectorPanel : public Panel {
public:
InspectorPanel();
~InspectorPanel();
void OnAttach() override;
void OnDetach() override;
void Render() override;
enum class SubjectMode {
None,
GameObject,
MaterialAsset,
UnsupportedAsset
};
using MaterialTagEditRow = ::XCEngine::Editor::MaterialTagEditRow;
using MaterialKeywordState = ::XCEngine::Editor::MaterialKeywordState;
using MaterialPropertyState = ::XCEngine::Editor::MaterialPropertyState;
using MaterialAssetState = ::XCEngine::Editor::MaterialAssetState;
private:
void SyncSubject();
void SetSubjectMode(SubjectMode mode);
void InspectMaterialAsset(const AssetItemPtr& item);
void ClearMaterialAsset();
void InvalidateMaterialAssetAsyncState();
void PopulateMaterialAssetStateFromResource(::XCEngine::Resources::Material& material);
void ApplyMaterialAssetStateToSelectedMaterial();
void RenderMaterialAsset();
void RenderUnsupportedAsset();
bool SaveMaterialAsset();
void ReloadMaterialAsset();
void RenderGameObject(::XCEngine::Components::GameObject* gameObject);
void RenderComponent(::XCEngine::Components::Component* component, ::XCEngine::Components::GameObject* gameObject);
void RenderEmptyState(const char* title, const char* subtitle = nullptr);
void OnSelectionChanged(const struct SelectionChangedEvent& event);
uint64_t m_selectionHandlerId = 0;
uint64_t m_selectedEntityId = 0;
SubjectMode m_subjectMode = SubjectMode::None;
EditorActionRoute m_lastExplicitRoute = EditorActionRoute::None;
AssetItemPtr m_selectedAssetItem;
::XCEngine::Resources::ResourceHandle<::XCEngine::Resources::Material> m_selectedMaterial;
MaterialAssetState m_materialAssetState;
std::uint64_t m_materialAssetLoadRevision = 0;
std::uint64_t m_materialShaderLoadRevision = 0;
bool m_materialShaderLoadInFlight = false;
std::string m_pendingMaterialShaderPath;
UI::DeferredPopupState m_addComponentPopup;
std::function<void()> m_deferredContextAction;
};
}
}