886 lines
19 KiB
C++
886 lines
19 KiB
C++
// Copyright 2020 Phyronnaz
|
|
|
|
#include "VoxelNodes/VoxelMathNodes.h"
|
|
#include "Runtime/VoxelNodeType.h"
|
|
#include "VoxelContext.h"
|
|
#include "NodeFunctions/VoxelNodeFunctions.h"
|
|
#include "NodeFunctions/VoxelMathNodeFunctions.h"
|
|
|
|
UVoxelNode_FMax::UVoxelNode_FMax()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
SetInputsCount(2, MAX_VOXELNODE_PINS);
|
|
}
|
|
|
|
GENERATED_VOXELNODE_IMPL_PREFIXOPLOOP(UVoxelNode_FMax, FVoxelNodeFunctions::Max<v_flt>, v_flt)
|
|
|
|
UVoxelNode_FMin::UVoxelNode_FMin()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
SetInputsCount(2, MAX_VOXELNODE_PINS);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL_PREFIXOPLOOP(UVoxelNode_FMin, FVoxelNodeFunctions::Min<v_flt>, v_flt)
|
|
|
|
UVoxelNode_IMax::UVoxelNode_IMax()
|
|
{
|
|
SetInputs(EC::Int);
|
|
SetOutputs(EC::Int);
|
|
SetInputsCount(2, MAX_VOXELNODE_PINS);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL_PREFIXOPLOOP(UVoxelNode_IMax, FVoxelNodeFunctions::Max<int32>, int32)
|
|
|
|
UVoxelNode_IMin::UVoxelNode_IMin()
|
|
{
|
|
SetInputs(EC::Int);
|
|
SetOutputs(EC::Int);
|
|
SetInputsCount(2, MAX_VOXELNODE_PINS);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL_PREFIXOPLOOP(UVoxelNode_IMin, FVoxelNodeFunctions::Min<int32>, int32)
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
UVoxelNode_FAdd::UVoxelNode_FAdd()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
SetInputsCount(2, MAX_VOXELNODE_PINS);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL_INFIXOPLOOP(UVoxelNode_FAdd, +, v_flt)
|
|
|
|
UVoxelNode_FMultiply::UVoxelNode_FMultiply()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
SetInputsCount(2, MAX_VOXELNODE_PINS);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL_INFIXOPLOOP(UVoxelNode_FMultiply, *, v_flt)
|
|
|
|
UVoxelNode_FSubstract::UVoxelNode_FSubstract()
|
|
{
|
|
SetInputs(EC::Float, EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_FSubstract,
|
|
DEFINE_INPUTS(v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = _I0 - _I1;
|
|
)
|
|
|
|
UVoxelNode_FDivide::UVoxelNode_FDivide()
|
|
{
|
|
SetInputs({ "", EC::Float, "", "0" }, { "", EC::Float, "", "1" });
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_FDivide,
|
|
DEFINE_INPUTS(v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = _I0 / _I1;
|
|
)
|
|
|
|
UVoxelNode_IAdd::UVoxelNode_IAdd()
|
|
{
|
|
SetInputs(EC::Int);
|
|
SetOutputs(EC::Int);
|
|
SetInputsCount(2, MAX_VOXELNODE_PINS);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL_INFIXOPLOOP(UVoxelNode_IAdd, +, int32)
|
|
|
|
UVoxelNode_IMultiply::UVoxelNode_IMultiply()
|
|
{
|
|
SetInputs(EC::Int);
|
|
SetOutputs(EC::Int);
|
|
SetInputsCount(2, MAX_VOXELNODE_PINS);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL_INFIXOPLOOP(UVoxelNode_IMultiply, *, int32)
|
|
|
|
UVoxelNode_ISubstract::UVoxelNode_ISubstract()
|
|
{
|
|
SetInputs(EC::Int, EC::Int);
|
|
SetOutputs(EC::Int);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_ISubstract,
|
|
DEFINE_INPUTS(int32, int32),
|
|
DEFINE_OUTPUTS(int32),
|
|
_O0 = _I0 - _I1;
|
|
)
|
|
|
|
UVoxelNode_IDivide::UVoxelNode_IDivide()
|
|
{
|
|
SetInputs({ "", EC::Int, "", "0" }, { "", EC::Int, "", "1" });
|
|
SetOutputs(EC::Int);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_IDivide,
|
|
DEFINE_INPUTS(int32, int32),
|
|
DEFINE_OUTPUTS(int32),
|
|
_O0 = _I1 == 0 ? 0 : _I0 / _I1;
|
|
)
|
|
|
|
UVoxelNode_ILeftBitShift::UVoxelNode_ILeftBitShift()
|
|
{
|
|
SetInputs({ "", EC::Int, "", "0" }, { "", EC::Int, "", "1" });
|
|
SetOutputs(EC::Int);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_ILeftBitShift,
|
|
DEFINE_INPUTS(int32, int32),
|
|
DEFINE_OUTPUTS(int32),
|
|
_O0 = FVoxelNodeFunctions::LeftShift(_I0, _I1);
|
|
)
|
|
|
|
UVoxelNode_IRightBitShift::UVoxelNode_IRightBitShift()
|
|
{
|
|
SetInputs({ "", EC::Int, "", "0" }, { "", EC::Int, "", "1" });
|
|
SetOutputs(EC::Int);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_IRightBitShift,
|
|
DEFINE_INPUTS(int32, int32),
|
|
DEFINE_OUTPUTS(int32),
|
|
_O0 = FVoxelNodeFunctions::RightShift(_I0, _I1);
|
|
)
|
|
|
|
UVoxelNode_FloatOfInt::UVoxelNode_FloatOfInt()
|
|
{
|
|
SetInputs(EC::Int);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_FloatOfInt,
|
|
DEFINE_INPUTS(int32),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = _I0;
|
|
)
|
|
|
|
UVoxelNode_Round::UVoxelNode_Round()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Int);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Round,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(int32),
|
|
_O0 = FVoxelNodeFunctions::RoundToInt(_I0);
|
|
)
|
|
|
|
UVoxelNode_Lerp::UVoxelNode_Lerp()
|
|
{
|
|
SetInputs(
|
|
{ "A", EC::Float, "A" },
|
|
{ "B", EC::Float, "B" },
|
|
{ "Alpha", EC::Float, "Alpha" });
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Lerp,
|
|
DEFINE_INPUTS(v_flt, v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Lerp(_I0, _I1, _I2);
|
|
)
|
|
|
|
UVoxelNode_SafeLerp::UVoxelNode_SafeLerp()
|
|
{
|
|
SetInputs(
|
|
{ "A", EC::Float, "A" },
|
|
{ "B", EC::Float, "B" },
|
|
{ "Alpha", EC::Float, "Alpha" });
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_SafeLerp,
|
|
DEFINE_INPUTS(v_flt, v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::SafeLerp(_I0, _I1, _I2);
|
|
)
|
|
|
|
UVoxelNode_SmoothStep::UVoxelNode_SmoothStep()
|
|
{
|
|
SetInputs(
|
|
{ "A", EC::Float, "Minimum value of X", "0" },
|
|
{ "B", EC::Float, "Maximum value of X", "1" },
|
|
{ "X", EC::Float, "Parameter" });
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_SmoothStep,
|
|
DEFINE_INPUTS(v_flt, v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelMathNodeFunctions::SmoothStep(_I0, _I1, _I2);
|
|
)
|
|
|
|
UVoxelNode_Clamp::UVoxelNode_Clamp()
|
|
{
|
|
SetInputs(
|
|
{ "Value", EC::Float, "Value to clamp" },
|
|
{ "Min", EC::Float, "Min value", "0" },
|
|
{ "Max", EC::Float, "Max value", "1" });
|
|
SetOutputs(EC::Float);
|
|
}
|
|
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Clamp,
|
|
DEFINE_INPUTS(v_flt, v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Clamp(_I0, _I1, _I2);
|
|
)
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
UVoxelNode_BAnd::UVoxelNode_BAnd()
|
|
{
|
|
SetInputs(EC::Boolean);
|
|
SetOutputs(EC::Boolean);
|
|
SetInputsCount(2, MAX_VOXELNODE_PINS);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL_INFIXOPLOOP(UVoxelNode_BAnd, &&, bool)
|
|
|
|
UVoxelNode_BOr::UVoxelNode_BOr()
|
|
{
|
|
SetInputs(EC::Boolean);
|
|
SetOutputs(EC::Boolean);
|
|
SetInputsCount(2, MAX_VOXELNODE_PINS);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL_INFIXOPLOOP(UVoxelNode_BOr, || , bool)
|
|
|
|
UVoxelNode_BNot::UVoxelNode_BNot()
|
|
{
|
|
SetInputs(EC::Boolean);
|
|
SetOutputs(EC::Boolean);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_BNot,
|
|
DEFINE_INPUTS(bool),
|
|
DEFINE_OUTPUTS(bool),
|
|
_O0 = !_I0;
|
|
)
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
UVoxelNode_SwitchInt::UVoxelNode_SwitchInt()
|
|
{
|
|
SetInputs(
|
|
{ "A", EC::Int, "A" },
|
|
{ "B", EC::Int, "B" },
|
|
{ "Pick A", EC::Boolean, "Condition" });
|
|
SetOutputs(EC::Int);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_SwitchInt,
|
|
DEFINE_INPUTS(int32, int32, bool),
|
|
DEFINE_OUTPUTS(int32),
|
|
_O0 = FVoxelNodeFunctions::Switch(_I0, _I1, _I2);
|
|
)
|
|
|
|
UVoxelNode_SwitchFloat::UVoxelNode_SwitchFloat()
|
|
{
|
|
SetInputs(
|
|
{ "A", EC::Float, "A" },
|
|
{ "B", EC::Float, "B" },
|
|
{ "Pick A", EC::Boolean, "Condition" });
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_SwitchFloat,
|
|
DEFINE_INPUTS(v_flt, v_flt, bool),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Switch(_I0, _I1, _I2);
|
|
)
|
|
|
|
UVoxelNode_SwitchColor::UVoxelNode_SwitchColor()
|
|
{
|
|
SetInputs(
|
|
{ "A", EC::Color, "A" },
|
|
{ "B", EC::Color, "B" },
|
|
{ "Pick A", EC::Boolean, "Condition" });
|
|
SetOutputs(EC::Color);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_SwitchColor,
|
|
DEFINE_INPUTS(FColor, FColor, bool),
|
|
DEFINE_OUTPUTS(FColor),
|
|
_O0 = FVoxelNodeFunctions::Switch(_I0, _I1, _I2);
|
|
)
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
UVoxelNode_1MinusX::UVoxelNode_1MinusX()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_1MinusX,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = 1 - _I0;
|
|
)
|
|
|
|
UVoxelNode_OneOverX::UVoxelNode_OneOverX()
|
|
{
|
|
SetInputs({ "", EC::Float, "", "1" });
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_OneOverX,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::OneOverX(_I0);
|
|
)
|
|
|
|
UVoxelNode_MinusX::UVoxelNode_MinusX()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_MinusX,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = _I0 * -1;
|
|
)
|
|
|
|
UVoxelNode_Sqrt::UVoxelNode_Sqrt()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Sqrt,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Sqrt(_I0);
|
|
)
|
|
|
|
UVoxelNode_Pow::UVoxelNode_Pow()
|
|
{
|
|
SetInputs(EC::Float, EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Pow,
|
|
DEFINE_INPUTS(v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Pow(_I0, _I1);
|
|
)
|
|
|
|
UVoxelNode_IMod::UVoxelNode_IMod()
|
|
{
|
|
SetInputs(EC::Int, EC::Int);
|
|
SetOutputs(EC::Int);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_IMod,
|
|
DEFINE_INPUTS(int32, int32),
|
|
DEFINE_OUTPUTS(int32),
|
|
_O0 = FVoxelNodeFunctions::Mod(_I0, _I1);
|
|
)
|
|
|
|
UVoxelNode_FMod::UVoxelNode_FMod()
|
|
{
|
|
SetInputs(EC::Float, EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_FMod,
|
|
DEFINE_INPUTS(v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Fmod(_I0, _I1);
|
|
)
|
|
|
|
UVoxelNode_FAbs::UVoxelNode_FAbs()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_FAbs,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Abs(_I0);
|
|
)
|
|
|
|
UVoxelNode_IAbs::UVoxelNode_IAbs()
|
|
{
|
|
SetInputs(EC::Int);
|
|
SetOutputs(EC::Int);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_IAbs,
|
|
DEFINE_INPUTS(int32),
|
|
DEFINE_OUTPUTS(int32),
|
|
_O0 = FVoxelNodeFunctions::Abs(_I0);
|
|
)
|
|
|
|
UVoxelNode_Ceil::UVoxelNode_Ceil()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Int);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Ceil,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(int32),
|
|
_O0 = FVoxelNodeFunctions::CeilToInt(_I0);
|
|
)
|
|
|
|
UVoxelNode_Floor::UVoxelNode_Floor()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Int);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Floor,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(int32),
|
|
_O0 = FVoxelNodeFunctions::FloorToInt(_I0);
|
|
)
|
|
|
|
UVoxelNode_VectorLength::UVoxelNode_VectorLength()
|
|
{
|
|
SetInputs(
|
|
{ "X", EC::Float, "Z" },
|
|
{ "Y", EC::Float, "Y" },
|
|
{ "Z", EC::Float, "Z" });
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_VectorLength,
|
|
DEFINE_INPUTS(v_flt, v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::VectorLength(_I0, _I1, _I2);
|
|
)
|
|
|
|
UVoxelNode_Fraction::UVoxelNode_Fraction()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Fraction,
|
|
DEFINE_INPUTS(v_flt, v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Fractional(_I0);
|
|
)
|
|
|
|
UVoxelNode_FSign::UVoxelNode_FSign()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_FSign,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Sign(_I0);
|
|
)
|
|
|
|
UVoxelNode_ISign::UVoxelNode_ISign()
|
|
{
|
|
SetInputs(EC::Int);
|
|
SetOutputs(EC::Int);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_ISign,
|
|
DEFINE_INPUTS(int32),
|
|
DEFINE_OUTPUTS(int32),
|
|
_O0 = FVoxelNodeFunctions::Sign(_I0);
|
|
)
|
|
|
|
UVoxelNode_InvSqrt::UVoxelNode_InvSqrt()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_InvSqrt,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::InvSqrt(_I0);
|
|
)
|
|
|
|
UVoxelNode_Loge::UVoxelNode_Loge()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Loge,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Loge(_I0);
|
|
)
|
|
|
|
UVoxelNode_Exp::UVoxelNode_Exp()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Exp,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Exp(_I0);
|
|
)
|
|
|
|
UVoxelNode_Sin::UVoxelNode_Sin()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Sin,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Sin(_I0);
|
|
)
|
|
|
|
UVoxelNode_Asin::UVoxelNode_Asin()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Asin,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Asin(_I0);
|
|
)
|
|
|
|
UVoxelNode_Sinh::UVoxelNode_Sinh()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Sinh,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Sinh(_I0);
|
|
)
|
|
|
|
UVoxelNode_Cos::UVoxelNode_Cos()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Cos,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Cos(_I0);
|
|
)
|
|
|
|
UVoxelNode_Acos::UVoxelNode_Acos()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Acos,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Acos(_I0);
|
|
)
|
|
|
|
UVoxelNode_SinCos::UVoxelNode_SinCos()
|
|
{
|
|
SetInputs(EC::Float);
|
|
AddOutput("Sin", "Sinus");
|
|
AddOutput("Cos", "Cosinus");
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_SinCos,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt, v_flt),
|
|
FVoxelNodeFunctions::SinCos(_I0, _O0, _O1);
|
|
)
|
|
|
|
UVoxelNode_Tan::UVoxelNode_Tan()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Tan,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Tan(_I0);
|
|
)
|
|
|
|
UVoxelNode_Atan::UVoxelNode_Atan()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Atan,
|
|
DEFINE_INPUTS(v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Atan(_I0);
|
|
)
|
|
|
|
UVoxelNode_Atan2::UVoxelNode_Atan2()
|
|
{
|
|
SetInputs(
|
|
{ "Y", EC::Float, "Y" },
|
|
{ "X", EC::Float, "X" });
|
|
SetOutputs(EC::Float);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Atan2,
|
|
DEFINE_INPUTS(v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = FVoxelNodeFunctions::Atan2(_I0, _I1);
|
|
)
|
|
|
|
UVoxelNode_VectorRotateAngleAxis::UVoxelNode_VectorRotateAngleAxis()
|
|
{
|
|
SetInputs(
|
|
{ "X", EC::Float, "X" },
|
|
{ "Y", EC::Float, "Y" },
|
|
{ "Z", EC::Float, "Z" },
|
|
{ "Axis X", EC::Float, "Axis X" },
|
|
{ "Axis Y", EC::Float, "Axis Y" },
|
|
{ "Axis Z", EC::Float, "Axis Z" },
|
|
{ "Angle", EC::Float, "Angle in degrees" }
|
|
);
|
|
SetOutputs(
|
|
{ "X", EC::Float, "X" },
|
|
{ "Y", EC::Float, "Y" },
|
|
{ "Z", EC::Float, "Z" }
|
|
);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_VectorRotateAngleAxis,
|
|
DEFINE_INPUTS(v_flt, v_flt, v_flt, v_flt, v_flt, v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt, v_flt, v_flt),
|
|
FVoxelNodeFunctions::VectorRotateAngleAxis(_I0, _I1, _I2, _I3, _I4, _I5, _I6, _O0, _O1, _O2);
|
|
)
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
UVoxelNode_BreakColorInt::UVoxelNode_BreakColorInt()
|
|
{
|
|
SetInputs({ "Color", EC::Color, "Color" });
|
|
SetOutputs(
|
|
{ "R", EC::Int, "Red between 0 and 255" },
|
|
{ "G", EC::Int, "Green between 0 and 255" },
|
|
{ "B", EC::Int, "Blue between 0 and 255" },
|
|
{ "A", EC::Int, "Alpha between 0 and 255" }
|
|
);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_BreakColorInt,
|
|
DEFINE_INPUTS(FColor),
|
|
DEFINE_OUTPUTS(int32, int32, int32, int32),
|
|
FVoxelNodeFunctions::BreakColor(_I0, _O0, _O1, _O2, _O3);
|
|
)
|
|
|
|
UVoxelNode_BreakColorFloat::UVoxelNode_BreakColorFloat()
|
|
{
|
|
SetInputs({ "Color", EC::Color, "Color" });
|
|
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" }
|
|
);
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_BreakColorFloat,
|
|
DEFINE_INPUTS(FColor),
|
|
DEFINE_OUTPUTS(v_flt, v_flt, v_flt, v_flt),
|
|
FVoxelNodeFunctions::BreakColorFloat(_I0, _O0, _O1, _O2, _O3);
|
|
)
|
|
|
|
UVoxelNode_MakeColorInt::UVoxelNode_MakeColorInt()
|
|
{
|
|
SetInputs(
|
|
{ "R",EC::Int , "Red between 0 and 255" , "", {0, 255} },
|
|
{ "G",EC::Int , "Green between 0 and 255", "", {0, 255} },
|
|
{ "B",EC::Int , "Blue between 0 and 255" , "", {0, 255} },
|
|
{ "A",EC::Int , "Alpha between 0 and 255", "", {0, 255} });
|
|
SetOutputs({ "Color", EC::Color, "Color" });
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_MakeColorInt,
|
|
DEFINE_INPUTS(int32, int32, int32, int32),
|
|
DEFINE_OUTPUTS(FColor),
|
|
_O0 = FVoxelNodeFunctions::MakeColor(_I0, _I1, _I2, _I3);
|
|
)
|
|
|
|
UVoxelNode_MakeColorFloat::UVoxelNode_MakeColorFloat()
|
|
{
|
|
SetInputs(
|
|
{ "R",EC::Float , "Red between 0 and 1" , "", {0, 1} },
|
|
{ "G",EC::Float , "Green between 0 and 1", "", {0, 1} },
|
|
{ "B",EC::Float , "Blue between 0 and 1" , "", {0, 1} },
|
|
{ "A",EC::Float , "Alpha between 0 and 1", "", {0, 1} });
|
|
SetOutputs({ "Color", EC::Color, "Color" });
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_MakeColorFloat,
|
|
DEFINE_INPUTS(v_flt, v_flt, v_flt, v_flt),
|
|
DEFINE_OUTPUTS(FColor),
|
|
_O0 = FVoxelNodeFunctions::MakeColorFloat(_I0, _I1, _I2, _I3);
|
|
)
|
|
|
|
UVoxelNode_RGBToHSV::UVoxelNode_RGBToHSV()
|
|
{
|
|
SetInputs(
|
|
{ "R", EC::Float , "Red" },
|
|
{ "G", EC::Float , "Green" },
|
|
{ "B", EC::Float , "Blue" });
|
|
SetOutputs(
|
|
{ "H", EC::Float , "Hue" },
|
|
{ "S", EC::Float , "Saturation" },
|
|
{ "V", EC::Float , "Value" });
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_RGBToHSV,
|
|
DEFINE_INPUTS(v_flt, v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt, v_flt, v_flt),
|
|
FVoxelNodeFunctions::RGBToHSV(_I0, _I1, _I2, _O0, _O1, _O2);
|
|
)
|
|
|
|
UVoxelNode_HSVToRGB::UVoxelNode_HSVToRGB()
|
|
{
|
|
SetInputs(
|
|
{ "H", EC::Float , "Hue between 0 and 360", "0", { 0, 360 } },
|
|
{ "S", EC::Float , "Saturation between 0 and 1", "1", { 0, 1 } },
|
|
{ "V", EC::Float , "Value", "1" });
|
|
SetOutputs(
|
|
{ "R", EC::Float , "Red" },
|
|
{ "G", EC::Float , "Green" },
|
|
{ "B", EC::Float , "Blue" });
|
|
}
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_HSVToRGB,
|
|
DEFINE_INPUTS(v_flt, v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt, v_flt, v_flt),
|
|
FVoxelNodeFunctions::HSVToRGB(_I0, _I1, _I2, _O0, _O1, _O2);
|
|
)
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
UVoxelNode_InverseTransformPositionXZ::UVoxelNode_InverseTransformPositionXZ()
|
|
{
|
|
SetInputs(
|
|
{ "X.X", EC::Float , "X component of the new basis X vector", "1" },
|
|
{ "X.Y", EC::Float , "Y component of the new basis X vector", "0" },
|
|
{ "X.Z", EC::Float , "Z component of the new basis X vector", "0" },
|
|
{ "Z.X", EC::Float , "X component of the new basis Z vector", "0" },
|
|
{ "Z.Y", EC::Float , "Y component of the new basis Z vector", "0" },
|
|
{ "Z.Z", EC::Float , "Z component of the new basis Z vector", "1" },
|
|
{ "X", EC::Float , "X component of the vector to transform" },
|
|
{ "Y", EC::Float , "Y component of the vector to transform" },
|
|
{ "Z", EC::Float , "Z component of the vector to transform" });
|
|
SetOutputs(
|
|
{ "X", EC::Float, "X component" },
|
|
{ "Y", EC::Float, "Y component" },
|
|
{ "Z", EC::Float, "Z component" });
|
|
}
|
|
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_InverseTransformPositionXZ,
|
|
DEFINE_INPUTS(v_flt, v_flt, v_flt, v_flt, v_flt, v_flt, v_flt, v_flt, v_flt),
|
|
DEFINE_OUTPUTS(v_flt, v_flt, v_flt),
|
|
FVoxelMathNodeFunctions::InverseTransformPositionXZ(_I0, _I1, _I2, _I3, _I4, _I5, _I6, _I7, _I8, _O0, _O1, _O2);
|
|
)
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
UVoxelNode_Pi::UVoxelNode_Pi()
|
|
{
|
|
SetOutputs(EC::Float);
|
|
}
|
|
|
|
GENERATED_VOXELNODE_IMPL
|
|
(
|
|
UVoxelNode_Pi,
|
|
NO_INPUTS,
|
|
DEFINE_OUTPUTS(v_flt),
|
|
_O0 = v_flt(3.1415926535897932384626433832795);
|
|
)
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
UVoxelNode_NormalizeSum::UVoxelNode_NormalizeSum()
|
|
{
|
|
SetInputs(EC::Float);
|
|
SetOutputs(EC::Float);
|
|
SetInputsCount(2, MAX_VOXELNODE_PINS);
|
|
}
|
|
|
|
void UVoxelNode_NormalizeSum::OnInputPinCountModified()
|
|
{
|
|
#if WITH_EDITOR
|
|
if (GraphNode)
|
|
{
|
|
GraphNode->ReconstructNode();
|
|
}
|
|
#endif
|
|
}
|
|
|
|
int32 UVoxelNode_NormalizeSum::GetOutputPinsCount() const
|
|
{
|
|
return FMath::Max(2, InputPinCount); // Else the default object has 0 output pins and doesn't show up in context sensitive menu
|
|
}
|
|
|