void BuildNodes(NodeHandle <TransitionByBoolNode> thisHandle, NodeSetAPI set)
        {
            if (m_TransitionType == TransitionType.Crossfade)
            {
                m_MixerNode             = set.Create <MixerNode>();
                m_WeightAccumulatorNode = set.Create <WeightAccumulatorNode>();

                set.Connect(m_DeltaTimeNode, KernelPassThroughNodeFloat.KernelPorts.Output, m_WeightAccumulatorNode, WeightAccumulatorNode.KernelPorts.DeltaTime);
                if (m_BlendCurve.IsCreated)
                {
                    m_AnimationCurveEvaluationNode = set.Create <EvaluateCurveNode>();

                    set.Connect(m_WeightAccumulatorNode, WeightAccumulatorNode.KernelPorts.BlendWeight, m_AnimationCurveEvaluationNode, EvaluateCurveNode.KernelPorts.Time);
                    set.Connect(m_AnimationCurveEvaluationNode, EvaluateCurveNode.KernelPorts.Output, m_MixerNode, MixerNode.KernelPorts.Weight);
                    set.Connect(thisHandle, SimulationPorts.m_OutBlendCurve, m_AnimationCurveEvaluationNode, EvaluateCurveNode.SimulationPorts.AnimationCurve);
                }
                else
                {
                    set.Connect(m_WeightAccumulatorNode, WeightAccumulatorNode.KernelPorts.BlendWeight, m_MixerNode, MixerNode.KernelPorts.Weight);
                }
                set.Connect(m_FalseInputNode, KernelPassThroughNodeBufferFloat.KernelPorts.Output, m_MixerNode, MixerNode.KernelPorts.Input0);
                set.Connect(m_TrueInputNode, KernelPassThroughNodeBufferFloat.KernelPorts.Output, m_MixerNode, MixerNode.KernelPorts.Input1);
                set.Connect(m_MixerNode, MixerNode.KernelPorts.Output, m_OutputNode, KernelPassThroughNodeBufferFloat.KernelPorts.Input);

                set.Connect(thisHandle, SimulationPorts.m_OutRig, m_MixerNode, MixerNode.SimulationPorts.Rig);
                set.Connect(thisHandle, SimulationPorts.m_OutDuration, m_WeightAccumulatorNode, WeightAccumulatorNode.SimulationPorts.Duration);
                set.Connect(thisHandle, SimulationPorts.m_OutClipSource, m_WeightAccumulatorNode, WeightAccumulatorNode.SimulationPorts.ClipSource);
            }
            else if (m_TransitionType == TransitionType.Inertial)
            {
                m_InertialBlendingNode = set.Create <InertialBlendingNode>();

                set.Connect(m_DeltaTimeNode, KernelPassThroughNodeFloat.KernelPorts.Output, m_InertialBlendingNode, InertialBlendingNode.KernelPorts.DeltaTime);
                set.Connect(m_TimeNode, KernelPassThroughNodeFloat.KernelPorts.Output, m_InertialBlendingNode, InertialBlendingNode.KernelPorts.Time);
                set.Connect(m_FalseInputNode, KernelPassThroughNodeBufferFloat.KernelPorts.Output, m_InertialBlendingNode, InertialBlendingNode.KernelPorts.Input0);
                set.Connect(m_TrueInputNode, KernelPassThroughNodeBufferFloat.KernelPorts.Output, m_InertialBlendingNode, InertialBlendingNode.KernelPorts.Input1);
                set.Connect(m_InertialBlendingNode, InertialBlendingNode.KernelPorts.Output, m_OutputNode, KernelPassThroughNodeBufferFloat.KernelPorts.Input);

                set.Connect(thisHandle, SimulationPorts.m_OutRig, m_InertialBlendingNode, InertialBlendingNode.SimulationPorts.Rig);
                set.Connect(thisHandle, SimulationPorts.m_OutDuration, m_InertialBlendingNode, InertialBlendingNode.SimulationPorts.Duration);
                set.Connect(thisHandle, SimulationPorts.m_OutClipSource, m_InertialBlendingNode, InertialBlendingNode.SimulationPorts.ClipSource);
            }
            else
            {
                throw new NotSupportedException($"The TransitionByBoolNode class does not support the '{m_TransitionType}' transition type.");
            }
        }
        void ClearNodes(NodeSetAPI set)
        {
            if (set.Exists(m_WeightAccumulatorNode))
            {
                set.Destroy(m_WeightAccumulatorNode);
            }

            if (set.Exists(m_MixerNode))
            {
                set.Destroy(m_MixerNode);
            }

            if (set.Exists(m_AnimationCurveEvaluationNode))
            {
                set.Destroy(m_AnimationCurveEvaluationNode);
            }

            if (set.Exists(m_InertialBlendingNode))
            {
                set.Destroy(m_InertialBlendingNode);
            }
        }