80 lines
2.4 KiB
C++
80 lines
2.4 KiB
C++
|
// Copyright 2020 Phyronnaz
|
||
|
|
||
|
#include "VoxelNodes/VoxelTextureSamplerNode.h"
|
||
|
#include "VoxelGraphGenerator.h"
|
||
|
#include "VoxelGraphErrorReporter.h"
|
||
|
#include "NodeFunctions/VoxelNodeFunctions.h"
|
||
|
#include "Engine/Texture2D.h"
|
||
|
|
||
|
UVoxelNode_TextureSampler::UVoxelNode_TextureSampler()
|
||
|
{
|
||
|
SetInputs(
|
||
|
{ "X", EC::Float, "Coordinate between 0 and texture width" },
|
||
|
{ "Y", EC::Float, "Coordinate between 0 and texture height" });
|
||
|
SetOutputs(
|
||
|
{ "R", EC::Float, "Red between 0 and 1" },
|
||
|
{ "G", EC::Float, "Green between 0 and 1" },
|
||
|
{ "B", EC::Float, "Blue between 0 and 1" },
|
||
|
{ "A", EC::Float, "Alpha between 0 and 1" });
|
||
|
}
|
||
|
|
||
|
|
||
|
EVoxelPinCategory UVoxelNode_TextureSampler::GetInputPinCategory(int32 PinIndex) const
|
||
|
{
|
||
|
return bBilinearInterpolation ? EC::Float : EC::Int;
|
||
|
}
|
||
|
|
||
|
FText UVoxelNode_TextureSampler::GetTitle() const
|
||
|
{
|
||
|
return FText::Format(VOXEL_LOCTEXT("Texture: {0}"), Super::GetTitle());
|
||
|
}
|
||
|
|
||
|
void UVoxelNode_TextureSampler::LogErrors(FVoxelGraphErrorReporter& ErrorReporter)
|
||
|
{
|
||
|
Super::LogErrors(ErrorReporter);
|
||
|
|
||
|
FString Error;
|
||
|
if (!FVoxelTextureUtilities::CanCreateFromTexture(Texture, Error))
|
||
|
{
|
||
|
ErrorReporter.AddMessageToNode(this, Error, EVoxelGraphNodeMessageType::Error);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
UVoxelNode_VoxelTextureSampler::UVoxelNode_VoxelTextureSampler()
|
||
|
{
|
||
|
SetInputs(
|
||
|
{"X", EC::Float, "Coordinate between 0 and texture width"},
|
||
|
{"Y", EC::Float, "Coordinate between 0 and texture height"});
|
||
|
SetOutputs(EC::Float);
|
||
|
}
|
||
|
|
||
|
|
||
|
EVoxelPinCategory UVoxelNode_VoxelTextureSampler::GetInputPinCategory(int32 PinIndex) const
|
||
|
{
|
||
|
return bBilinearInterpolation ? EC::Float : EC::Int;
|
||
|
}
|
||
|
|
||
|
FText UVoxelNode_VoxelTextureSampler::GetTitle() const
|
||
|
{
|
||
|
return FText::Format(VOXEL_LOCTEXT("Voxel Texture: {0}"), Super::GetTitle());
|
||
|
}
|
||
|
|
||
|
#if WITH_EDITOR
|
||
|
void UVoxelNode_VoxelTextureSampler::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
|
||
|
{
|
||
|
Super::PostEditChangeProperty(PropertyChangedEvent);
|
||
|
|
||
|
if (PropertyChangedEvent.Property &&
|
||
|
PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_STATIC(UVoxelNode_TextureSampler, bBilinearInterpolation) &&
|
||
|
GraphNode &&
|
||
|
Graph)
|
||
|
{
|
||
|
GraphNode->ReconstructNode();
|
||
|
Graph->CompileVoxelNodesFromGraphNodes();
|
||
|
}
|
||
|
}
|
||
|
#endif
|