58 lines
1.7 KiB
C++
58 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "MCPServer.h"
|
|
#include "MCPHandler.h"
|
|
#include "MCPFetcher.h"
|
|
#include "MCPUtils.h"
|
|
#include "Materials/MaterialInstanceConstant.h"
|
|
#include "MaterialTypes.h"
|
|
#include "MaterialInstance_DumpParameters.generated.h"
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------------
|
|
|
|
UCLASS()
|
|
class UMCP_MaterialInstance_DumpParameters : public UObject, public IMCPHandler
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
UPROPERTY(meta=(Description="Material Instance path"))
|
|
FString Path;
|
|
|
|
virtual FString GetDescription() const override
|
|
{
|
|
return TEXT("List all parameters on a Material Instance, showing current values and which are overridden.");
|
|
}
|
|
|
|
virtual void Handle() override
|
|
{
|
|
MCPFetcher F;
|
|
UMaterialInstanceConstant* MI = F.Asset(Path).Cast<UMaterialInstanceConstant>();
|
|
if (!MI) return;
|
|
|
|
auto AllParams = MCPUtils::GetMaterialParameters(MI);
|
|
|
|
// Overridden parameters first.
|
|
bool bHasOverrides = false;
|
|
for (auto& [Info, Meta] : AllParams)
|
|
{
|
|
if (!Meta.bOverride) continue;
|
|
if (!bHasOverrides) { UMCPServer::Print(TEXT("\nOverridden Parameters:\n")); bHasOverrides = true; }
|
|
MCPUtils::FormatMaterialParameter(Info, Meta);
|
|
}
|
|
|
|
// Inherited (non-overridden) parameters.
|
|
bool bHasInherited = false;
|
|
for (auto& [Info, Meta] : AllParams)
|
|
{
|
|
if (Meta.bOverride) continue;
|
|
if (!bHasInherited) { UMCPServer::Print(TEXT("\nInherited Parameters (not overridden):\n")); bHasInherited = true; }
|
|
MCPUtils::FormatMaterialParameter(Info, Meta);
|
|
}
|
|
}
|
|
};
|