2019-12-27 09:26:59 -05:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
2019-10-01 20:41:42 -04:00
|
|
|
|
|
|
|
|
#include "Properties/MeshMaterialProperties.h"
|
|
|
|
|
|
2021-06-13 00:36:02 -04:00
|
|
|
#include "DynamicMesh/DynamicMesh3.h"
|
2019-10-01 20:41:42 -04:00
|
|
|
|
|
|
|
|
#include "Materials/MaterialInstanceDynamic.h"
|
|
|
|
|
|
|
|
|
|
#define LOCTEXT_NAMESPACE "UMeshMaterialProperites"
|
|
|
|
|
|
|
|
|
|
UNewMeshMaterialProperties::UNewMeshMaterialProperties()
|
|
|
|
|
{
|
|
|
|
|
Material = CreateDefaultSubobject<UMaterialInterface>(TEXT("MATERIAL"));
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-18 20:41:17 -05:00
|
|
|
const TArray<FString>& UExistingMeshMaterialProperties::GetUVChannelNamesFunc() const
|
|
|
|
|
{
|
|
|
|
|
return UVChannelNamesList;
|
|
|
|
|
}
|
|
|
|
|
|
2021-06-15 00:27:42 -04:00
|
|
|
void UExistingMeshMaterialProperties::RestoreProperties(UInteractiveTool* RestoreToTool, const FString& CacheIdentifier)
|
2020-04-20 21:38:11 -04:00
|
|
|
{
|
2021-06-15 00:27:42 -04:00
|
|
|
Super::RestoreProperties(RestoreToTool, CacheIdentifier);
|
2020-04-20 21:38:11 -04:00
|
|
|
Setup();
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-01 20:41:42 -04:00
|
|
|
void UExistingMeshMaterialProperties::Setup()
|
|
|
|
|
{
|
2021-07-29 20:08:48 -04:00
|
|
|
UMaterial* CheckerMaterialBase = LoadObject<UMaterial>(nullptr, TEXT("/MeshModelingToolsetExp/Materials/CheckerMaterial"));
|
2019-10-01 20:41:42 -04:00
|
|
|
if (CheckerMaterialBase != nullptr)
|
|
|
|
|
{
|
|
|
|
|
CheckerMaterial = UMaterialInstanceDynamic::Create(CheckerMaterialBase, NULL);
|
|
|
|
|
if (CheckerMaterial != nullptr)
|
|
|
|
|
{
|
|
|
|
|
CheckerMaterial->SetScalarParameterValue("Density", CheckerDensity);
|
2021-11-18 20:41:17 -05:00
|
|
|
CheckerMaterial->SetScalarParameterValue("UVChannel", static_cast<float>(UVChannelNamesList.IndexOfByKey(UVChannel)));
|
2019-10-01 20:41:42 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UExistingMeshMaterialProperties::UpdateMaterials()
|
|
|
|
|
{
|
|
|
|
|
if (CheckerMaterial != nullptr)
|
|
|
|
|
{
|
|
|
|
|
CheckerMaterial->SetScalarParameterValue("Density", CheckerDensity);
|
2021-11-18 20:41:17 -05:00
|
|
|
CheckerMaterial->SetScalarParameterValue("UVChannel", static_cast<float>(UVChannelNamesList.IndexOfByKey(UVChannel)));
|
2019-10-01 20:41:42 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-12-19 18:07:47 -05:00
|
|
|
|
|
|
|
|
UMaterialInterface* UExistingMeshMaterialProperties::GetActiveOverrideMaterial() const
|
2019-10-01 20:41:42 -04:00
|
|
|
{
|
|
|
|
|
if (MaterialMode == ESetMeshMaterialMode::Checkerboard && CheckerMaterial != nullptr)
|
|
|
|
|
{
|
2019-12-19 18:07:47 -05:00
|
|
|
return CheckerMaterial;
|
2019-10-01 20:41:42 -04:00
|
|
|
}
|
2019-12-19 18:07:47 -05:00
|
|
|
if (MaterialMode == ESetMeshMaterialMode::Override && OverrideMaterial != nullptr)
|
2019-10-01 20:41:42 -04:00
|
|
|
{
|
2019-12-19 18:07:47 -05:00
|
|
|
return OverrideMaterial;
|
2019-10-01 20:41:42 -04:00
|
|
|
}
|
2019-12-19 18:07:47 -05:00
|
|
|
return nullptr;
|
2019-10-01 20:41:42 -04:00
|
|
|
}
|
|
|
|
|
|
2021-11-18 20:41:17 -05:00
|
|
|
void UExistingMeshMaterialProperties::UpdateUVChannels(int32 UVChannelIndex, const TArray<FString>& UVChannelNames, bool bUpdateSelection)
|
|
|
|
|
{
|
|
|
|
|
UVChannelNamesList = UVChannelNames;
|
|
|
|
|
if (bUpdateSelection)
|
|
|
|
|
{
|
|
|
|
|
UVChannel = 0 <= UVChannelIndex && UVChannelIndex < UVChannelNames.Num() ? UVChannelNames[UVChannelIndex] : TEXT("");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-01 20:41:42 -04:00
|
|
|
#undef LOCTEXT_NAMESPACE
|