76 lines
1.4 KiB
C#
76 lines
1.4 KiB
C#
|
|
|
||
|
|
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;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|