Files

64 lines
1.4 KiB
C#
Raw Permalink Normal View History

2025-05-13 03:19:28 +03:00
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;
}
}