64 lines
1.4 KiB
C#
64 lines
1.4 KiB
C#
using UnityEngine;
|
|||
|
|
using System.Collections;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using System.Linq;
|
||
|
|
|
||
|
|
public class TableCurve : Curve {
|
||
|
|
private readonly List<float> _args;
|
||
|
|
private readonly List<float> _vals;
|
||
|
|
|
||
|
|
public float[] Args{
|
||
|
|
get{return _args.ToArray();}
|
||
|
|
}
|
||
|
|
|
||
|
|
public float[] Vals{
|
||
|
|
get{return _vals.ToArray();}
|
||
|
|
}
|
||
|
|
public TableCurve(){
|
||
|
|
_args = new List<float>();
|
||
|
|
_vals = new List<float>();
|
||
|
|
}
|
||
|
|
public TableCurve(IList<float> args, IList<float> vals){
|
||
|
|
if((args == null) || (vals == null)){
|
||
|
|
_args = new List<float>();
|
||
|
|
_vals = new List<float>();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
_args = args.ToList();
|
||
|
|
_vals = vals.ToList();
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
public void AddArg(float arg){
|
||
|
|
_args.Add(arg);
|
||
|
|
}
|
||
|
|
public void AddVal(float val){
|
||
|
|
_vals.Add(val);
|
||
|
|
}
|
||
|
|
|
||
|
|
public override float Sample(float arg) {
|
||
|
|
arg = Mathf.Clamp(arg, _args[0], _args[_args.Count - 1]);
|
||
|
|
for (int i = 0; i < (_args.Count - 1); ++i) {
|
||
|
|
if (_args[i] == arg) {
|
||
|
|
return _vals[i];
|
||
|
|
}
|
||
|
|
var a = _args[i];
|
||
|
|
var b = _args[i + 1];
|
||
|
|
//args decreasing
|
||
|
|
if (b < a) {
|
||
|
|
if (arg < a && arg > b) {
|
||
|
|
return Mathf.Lerp(_vals[i], _vals[i + 1], (arg - a) / (b - a));
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
if (arg > a && arg < b) {
|
||
|
|
return Mathf.Lerp(_vals[i], _vals[i + 1], (arg - a) / (b - a));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return float.NaN;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
}
|