rj-action-library/Runtime/Actions/Time/TweenTimeLineSpeed.cs

77 lines
1.6 KiB
C#

using System;
using Godot;
namespace Rokojori
{
[Tool]
[GlobalClass ]
public partial class TweenTimeLineSpeed:SequenceAction
{
[Export]
public TimeLine targetTimeLine;
[Export]
public float timeLineSpeed;
[Export]
public TweenType tweenType = new TweenTimeCurve();
[Export]
public bool cacheSpeedOnStart = true;
[Export]
public TimeLine tweenTimeLine;
protected override void _OnTrigger()
{
if ( targetTimeLine == null )
{
return;
}
var tl = tweenTimeLine == null ? TimeLineManager.Get().realtimeTimeline : tweenTimeLine;
var start = targetTimeLine.position;
var fromSpeed = targetTimeLine.runner.speed;
var toSpeed = timeLineSpeed;
var sequenceID = DispatchStart();
var tweenType = this.tweenType;
if ( tweenType == null )
{
tweenType = TweenTimeCurve.defaultCurve;
}
TimeLineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(),
( span, type )=>
{
var timeNow = tl.position;
var elapsed = timeNow - start;
var state = tweenType.GetTweenPhaseForPhase( span.phase );
if ( ! cacheSpeedOnStart )
{
toSpeed = timeLineSpeed;
}
var lerpedSpeed = Mathf.Lerp( fromSpeed, toSpeed, state );
targetTimeLine.runner.speed = lerpedSpeed;
if ( type == TimeLineSpanUpdateType.End )
{
DispatchEnd( sequenceID );
}
}
);
}
}
}