100 lines
2.1 KiB
C#
100 lines
2.1 KiB
C#
![]() |
|
||
|
using System;
|
||
|
using Godot;
|
||
|
|
||
|
|
||
|
namespace Rokojori
|
||
|
{
|
||
|
[Tool]
|
||
|
[GlobalClass ]
|
||
|
public partial class TweenFloat:SequenceAction, Animator
|
||
|
{
|
||
|
[Export]
|
||
|
public GodotObject target;
|
||
|
|
||
|
[Export]
|
||
|
public string targetMember;
|
||
|
|
||
|
[Export]
|
||
|
public float endValue;
|
||
|
|
||
|
[Export]
|
||
|
public Duration duration;
|
||
|
|
||
|
[Export]
|
||
|
public Curve curve;
|
||
|
|
||
|
public void OnAnimatorStart(){}
|
||
|
public void OnAnimatorEnd(){}
|
||
|
public void OnAnimatorCancel(){}
|
||
|
|
||
|
int _actionID = -1;
|
||
|
int _timeID = -1;
|
||
|
|
||
|
protected override void _OnTrigger()
|
||
|
{
|
||
|
this.LogInfo( "Started Float Tween" );
|
||
|
|
||
|
|
||
|
if ( Engine.IsEditorHint() )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ( _actionID != -1 )
|
||
|
{
|
||
|
CancelAction( _actionID );
|
||
|
}
|
||
|
|
||
|
_actionID = DispatchStart();
|
||
|
|
||
|
var startValue = ReflectionHelper.GetValue<float>( target, targetMember );
|
||
|
|
||
|
AnimationManager.StartAnimation( this, target, targetMember );
|
||
|
|
||
|
// this.LogInfo( "Get Float Tween", startValue );
|
||
|
|
||
|
_timeID = TimeLineManager.ScheduleSpanWith( duration,
|
||
|
( span, type )=>
|
||
|
{
|
||
|
|
||
|
// this.LogInfo( "Update Float Tween", startValue );
|
||
|
if ( span.id != _timeID )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ( ! AnimationManager.IsAnimating( this, target, targetMember ) )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var phase = span.phase;
|
||
|
|
||
|
if ( curve != null )
|
||
|
{
|
||
|
phase = curve.Sample( phase );
|
||
|
}
|
||
|
|
||
|
var value = Mathf.Lerp( startValue, endValue, phase );
|
||
|
|
||
|
// this.LogInfo( "Updating Float Tween", "phase:", phase, "value:", value, target );
|
||
|
|
||
|
ReflectionHelper.SetValue( target, targetMember, value );
|
||
|
|
||
|
if ( type == TimeLineSpanUpdateType.End )
|
||
|
{
|
||
|
// this.LogInfo( "End Float Tween", endValue );
|
||
|
|
||
|
target._Set( targetMember, endValue );
|
||
|
AnimationManager.EndAnimation( this, target, targetMember );
|
||
|
DispatchEnd( _actionID );
|
||
|
_actionID = -1;
|
||
|
_timeID = -1;
|
||
|
}
|
||
|
}
|
||
|
).id;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|