*
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user