winter-tales/VFX/CompositorVFXFader.cs

76 lines
1.4 KiB
C#
Raw Permalink Normal View History

2026-01-20 13:59:55 +00:00
using System;
using Godot;
namespace Rokojori
{
[Tool][GlobalClass ]
public partial class CompositorVFXFader: Node
{
[Export]
public CompositorVFX[] effects;
float _value = 0;
[Export( PropertyHint.Range, "0,1")]
public float value
{
get { return _value; }
set
{
_value = value;
try
{
UpdateValue();
}
catch( Exception e )
{
this.LogError( e );
}
}
}
void UpdateValue()
{
if ( effects == null )
{
return;
}
var position = _value * effects.Length - 1f; // 0 1 2 3
var lower = Mathf.Floor( position );
var higher = lower + 1;
var highAmount = position - lower;
var lowAmount = 1f - highAmount;
if ( lower >= effects.Length - 1)
{
for ( int i = 0; i < effects.Length; i++ )
{
effects[ i ].driverValue = i == effects.Length - 1 ? 1f : 0f;
}
}
for ( int i = 0; i < effects.Length; i++ )
{
if ( i != lower && i != higher )
{
effects[ i ].driverValue = 0;
continue;
}
if ( i == lower )
{
effects[ i ].driverValue = lowAmount;
}
else
{
effects[ i ].driverValue = highAmount;
}
}
}
}
}