Components/WheelFrictionInfo.cs
using Sandbox;
public struct WheelFrictionInfo
{
public float ExtremumSlip { get; set; }
public float ExtremumValue { get; set; }
public float AsymptoteSlip { get; set; }
public float AsymptoteValue { get; set; }
public float Stiffness { get; set; }
public WheelFrictionInfo()
{
ExtremumSlip = 1.0f;
ExtremumValue = 20000.0f;
AsymptoteSlip = 2.0f;
AsymptoteValue = 10000.0f;
Stiffness = 1.0f;
}
public float Evaluate( float slip )
{
var value = 0.0f;
if ( slip <= ExtremumSlip )
{
value = (slip / ExtremumSlip) * ExtremumValue;
}
else
{
value = ExtremumValue - ((slip - ExtremumSlip) / (AsymptoteSlip - ExtremumSlip)) * (ExtremumValue - AsymptoteValue);
}
return (value * Stiffness).Clamp( 0, float.MaxValue );
}
}