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; } } } } }