CelticCraft/Plugins/VoxelFree/Source/VoxelGraph/Private/VoxelNodes/VoxelCoordinatesNodes.cpp

199 lines
No EOL
4.7 KiB
C++

// Copyright 2020 Phyronnaz
#include "VoxelNodes/VoxelCoordinatesNodes.h"
#include "VoxelNodes/VoxelNodeColors.h"
#include "Runtime/VoxelNodeType.h"
#include "VoxelContext.h"
#include "VoxelAxisDependencies.h"
#include "NodeFunctions/VoxelNodeFunctions.h"
UVoxelCoordinateNode::UVoxelCoordinateNode()
{
SetColor(FVoxelNodeColors::FloatNode);
}
//////////////////////////////////////////////////////////////////////////////////////
// Note: Both local and global coordinates are depending on their corresponding axis.
// If the transform has a rotation, the graph generator helper won't use the axis dependencies
//////////////////////////////////////////////////////////////////////////////////////
UVoxelNode_XF::UVoxelNode_XF()
{
SetOutputs(EC::Float);
}
uint8 UVoxelNode_XF::GetNodeDependencies() const
{
return EVoxelAxisDependenciesFlags::X;
}
GENERATED_VOXELNODE_IMPL
(
UVoxelNode_XF,
NO_INPUTS,
DEFINE_OUTPUTS(v_flt),
_O0 = _C0.GetLocalX();
)
UVoxelNode_YF::UVoxelNode_YF()
{
SetOutputs(EC::Float);
}
uint8 UVoxelNode_YF::GetNodeDependencies() const
{
return EVoxelAxisDependenciesFlags::Y;
}
GENERATED_VOXELNODE_IMPL
(
UVoxelNode_YF,
NO_INPUTS,
DEFINE_OUTPUTS(v_flt),
_O0 = _C0.GetLocalY();
)
UVoxelNode_ZF::UVoxelNode_ZF()
{
SetOutputs(EC::Float);
}
uint8 UVoxelNode_ZF::GetNodeDependencies() const
{
return EVoxelAxisDependenciesFlags::Z;
}
GENERATED_VOXELNODE_IMPL
(
UVoxelNode_ZF,
NO_INPUTS,
DEFINE_OUTPUTS(v_flt),
_O0 = _C0.GetLocalZ();
)
//////////////////////////////////////////////////////////////////////////////////////
UVoxelNode_GlobalX::UVoxelNode_GlobalX()
{
SetOutputs(EC::Float);
}
uint8 UVoxelNode_GlobalX::GetNodeDependencies() const
{
return EVoxelAxisDependenciesFlags::X;
}
GENERATED_VOXELNODE_IMPL
(
UVoxelNode_GlobalX,
NO_INPUTS,
DEFINE_OUTPUTS(v_flt),
_O0 = _C0.GetWorldX();
)
UVoxelNode_GlobalY::UVoxelNode_GlobalY()
{
SetOutputs(EC::Float);
}
uint8 UVoxelNode_GlobalY::GetNodeDependencies() const
{
return EVoxelAxisDependenciesFlags::Y;
}
GENERATED_VOXELNODE_IMPL
(
UVoxelNode_GlobalY,
NO_INPUTS,
DEFINE_OUTPUTS(v_flt),
_O0 = _C0.GetWorldY();
)
UVoxelNode_GlobalZ::UVoxelNode_GlobalZ()
{
SetOutputs(EC::Float);
}
uint8 UVoxelNode_GlobalZ::GetNodeDependencies() const
{
return EVoxelAxisDependenciesFlags::Z;
}
GENERATED_VOXELNODE_IMPL
(
UVoxelNode_GlobalZ,
NO_INPUTS,
DEFINE_OUTPUTS(v_flt),
_O0 = _C0.GetWorldZ();
)
//////////////////////////////////////////////////////////////////////////////////////
UVoxelNode_LocalToGlobal::UVoxelNode_LocalToGlobal()
{
SetInputs(
{ "X", EC::Float, "X in local space" },
{ "Y", EC::Float, "Y in local space" },
{ "Z", EC::Float, "Z in local space" });
SetOutputs(
{ "X", EC::Float, "X in global space" },
{ "Y", EC::Float, "Y in global space" },
{ "Z", EC::Float, "Z in global space" });
}
GENERATED_VOXELNODE_IMPL
(
UVoxelNode_LocalToGlobal,
DEFINE_INPUTS(v_flt, v_flt, v_flt),
DEFINE_OUTPUTS(v_flt, v_flt, v_flt),
FVoxelNodeFunctions::LocalToGlobal(_I0, _I1, _I2, _O0, _O1, _O2, _C0);
)
UVoxelNode_GlobalToLocal::UVoxelNode_GlobalToLocal()
{
SetInputs(
{ "X", EC::Float, "X in global space" },
{ "Y", EC::Float, "Y in global space" },
{ "Z", EC::Float, "Z in global space" });
SetOutputs(
{ "X", EC::Float, "X in local space" },
{ "Y", EC::Float, "Y in local space" },
{ "Z", EC::Float, "Z in local space" });
}
GENERATED_VOXELNODE_IMPL
(
UVoxelNode_GlobalToLocal,
DEFINE_INPUTS(v_flt, v_flt, v_flt),
DEFINE_OUTPUTS(v_flt, v_flt, v_flt),
FVoxelNodeFunctions::GlobalToLocal(_I0, _I1, _I2, _O0, _O1, _O2, _C0);
)
//////////////////////////////////////////////////////////////////////////////////////
UVoxelNode_TransformVector::UVoxelNode_TransformVector()
{
SetInputs(
{ "X", EC::Float, "X in local space" },
{ "Y", EC::Float, "Y in local space" },
{ "Z", EC::Float, "Z in local space" });
SetOutputs(
{ "X", EC::Float, "X in global space" },
{ "Y", EC::Float, "Y in global space" },
{ "Z", EC::Float, "Z in global space" });
}
GENERATED_VOXELNODE_IMPL
(
UVoxelNode_TransformVector,
DEFINE_INPUTS(v_flt, v_flt, v_flt),
DEFINE_OUTPUTS(v_flt, v_flt, v_flt),
FVoxelNodeFunctions::TransformVector(_I0, _I1, _I2, _O0, _O1, _O2, _C0);
)
UVoxelNode_InverseTransformVector::UVoxelNode_InverseTransformVector()
{
SetInputs(
{ "X", EC::Float, "X in global space" },
{ "Y", EC::Float, "Y in global space" },
{ "Z", EC::Float, "Z in global space" });
SetOutputs(
{ "X", EC::Float, "X in local space" },
{ "Y", EC::Float, "Y in local space" },
{ "Z", EC::Float, "Z in local space" });
}
GENERATED_VOXELNODE_IMPL
(
UVoxelNode_InverseTransformVector,
DEFINE_INPUTS(v_flt, v_flt, v_flt),
DEFINE_OUTPUTS(v_flt, v_flt, v_flt),
FVoxelNodeFunctions::InverseTransformVector(_I0, _I1, _I2, _O0, _O1, _O2, _C0);
)