rabidus-test/Assets/Dreamteck/Splines/Components/Sample Modifiers/FollowerSpeedModifier.cs

74 lines
1.9 KiB
C#
Raw Normal View History

2023-07-24 16:38:13 +03:00
namespace Dreamteck.Splines
{
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class FollowerSpeedModifier : SplineSampleModifier
{
[System.Serializable]
public class SpeedKey : Key
{
public enum Mode { Add, Multiply }
public float speed = 0f;
public Mode mode = Mode.Add;
public SpeedKey(double f, double t) : base(f, t)
{
}
}
public List<SpeedKey> keys = new List<SpeedKey>();
public FollowerSpeedModifier()
{
keys = new List<SpeedKey>();
}
public override List<Key> GetKeys()
{
List<Key> output = new List<Key>();
for (int i = 0; i < keys.Count; i++)
{
output.Add(keys[i]);
}
return output;
}
public override void SetKeys(List<Key> input)
{
keys = new List<SpeedKey>();
for (int i = 0; i < input.Count; i++)
{
//input[i]._modifier = this;
keys.Add((SpeedKey)input[i]);
}
}
public void AddKey(double f, double t)
{
keys.Add(new SpeedKey(f, t));
}
public override void Apply(ref SplineSample result)
{
}
public float GetSpeed(float input, double percent)
{
for (int i = 0; i < keys.Count; i++)
{
float lerp = keys[i].Evaluate(percent);
if(keys[i].mode == SpeedKey.Mode.Add)
{
input += keys[i].speed * lerp;
} else
{
input *= Mathf.Lerp(1f, keys[i].speed, lerp);
}
}
return input;
}
}
}