81 lines
2.5 KiB
C++
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;
|
|
};
|
|
|
|
}
|
|
}
|