81 lines
1.8 KiB
C#
81 lines
1.8 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 AnimationCurve:Resource
|
||
|
{
|
||
|
[Export]
|
||
|
public float duration = 1;
|
||
|
|
||
|
[Export]
|
||
|
public float durationRandomRange = 0;
|
||
|
|
||
|
[Export]
|
||
|
public float delay = 0;
|
||
|
|
||
|
[Export]
|
||
|
public float delayRandomRange = 0;
|
||
|
|
||
|
|
||
|
[Export]
|
||
|
public Curve curve = MathX.Curve( 0, 0, -1, 1 );
|
||
|
|
||
|
[Export]
|
||
|
public float scaleY = 1;
|
||
|
|
||
|
[Export]
|
||
|
public float scaleRandomRange = 0;
|
||
|
|
||
|
public float GetRandomizedDuration( Vector3 random )
|
||
|
{
|
||
|
return duration + random.X;
|
||
|
}
|
||
|
|
||
|
public float GetRandomizedDelay( Vector3 random )
|
||
|
{
|
||
|
return delay + random.Y;
|
||
|
}
|
||
|
|
||
|
public float GetRandomizedEndTime( Vector3 random )
|
||
|
{
|
||
|
return GetRandomizedDuration( random ) + GetRandomizedDelay( random );
|
||
|
}
|
||
|
|
||
|
public float GetRandomizedScale( Vector3 random )
|
||
|
{
|
||
|
return scaleY + random.Z;
|
||
|
}
|
||
|
|
||
|
public Vector3 Randomize( RandomEngine random = null )
|
||
|
{
|
||
|
random = random == null ? GodotRandom.Get() : random;
|
||
|
|
||
|
return new Vector3(
|
||
|
random.Polar() * durationRandomRange,
|
||
|
random.Polar() * delayRandomRange,
|
||
|
random.Polar() * scaleRandomRange
|
||
|
);
|
||
|
|
||
|
}
|
||
|
|
||
|
public float Sample( float time, float durationOffset = 0, float delayOffset = 0, float scaleOffset = 0 )
|
||
|
{
|
||
|
time -= Mathf.Max( 0f, delay + delayOffset );
|
||
|
var phase = MathX.Clamp01( time / ( Mathf.Max( 0.001f, duration + durationOffset ) ) );
|
||
|
|
||
|
return curve.Sample( phase ) * ( scaleY + scaleOffset );
|
||
|
}
|
||
|
|
||
|
public float Sample( float time, Vector3 randomization )
|
||
|
{
|
||
|
return Sample( time, randomization.X, randomization.Y, randomization.Z );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|