87 lines
1.9 KiB
C#
87 lines
1.9 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Text.RegularExpressions;
|
|
using System.Text;
|
|
using Godot;
|
|
|
|
namespace Rokojori
|
|
{
|
|
[Tool]
|
|
[GlobalClass]
|
|
public partial class Wipe:SequenceAction
|
|
{
|
|
public enum Direction
|
|
{
|
|
In,
|
|
Out
|
|
}
|
|
|
|
[Export]
|
|
public Direction direction;
|
|
|
|
[Export]
|
|
public Duration duration;
|
|
|
|
[Export]
|
|
public WipeSettings wipeSettings;
|
|
|
|
protected override void _OnTrigger()
|
|
{
|
|
var wipeEffect = wipeSettings.wipeEffect;
|
|
var compositor = wipeSettings.compositor;
|
|
|
|
var tm = TimeLineManager.Get();
|
|
|
|
var d = duration != null ? duration : SecondsDuration.Create( 1, TimeLineManager.Ensure( null ) );
|
|
|
|
var actionID = DispatchStart();
|
|
|
|
|
|
var effects = wipeEffect.GetEffects( compositor );
|
|
var animations = wipeEffect.GetWipeAnimations( direction );
|
|
|
|
|
|
wipeEffect.AddToCompositor( compositor );
|
|
|
|
// this.LogInfo( "Start:", Time.GetTicksMsec() );
|
|
|
|
|
|
TimeLineManager.ScheduleSpanIn( d.timeLine, 0, d.GetDurationInSeconds() ,
|
|
( span, type )=>
|
|
{
|
|
if ( actionID == -1 )
|
|
{
|
|
return;
|
|
}
|
|
|
|
// this.LogInfo( "Wipe Update:", span.phase._FFF() );
|
|
|
|
for ( int i = 0; i < effects.Count; i++ )
|
|
{
|
|
var fx = effects[ i ];
|
|
var value = animations[ i ].GetLerpedValueAt( span.phase, Mathf.Lerp );
|
|
fx.wipeState = value;
|
|
|
|
// this.LogInfo( "Wipe[" + i + "]", "value:", value );
|
|
}
|
|
|
|
if ( type == TimeLineSpanUpdateType.End )
|
|
{
|
|
if ( Direction.Out == direction )
|
|
{
|
|
wipeEffect.RemoveFromCompositor( compositor );
|
|
}
|
|
|
|
DispatchEnd( actionID );
|
|
|
|
// this.LogInfo( "End:", Time.GetTicksMsec() );
|
|
}
|
|
|
|
},
|
|
this
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
} |