I wrote it for my arcade car controller and wanted to get feedback on potential failure points
if(InductionType == InductionTypes.Turbocharger)
{
MaxInductorRPM = (MaxRPM*10*ExhaustPressure)/TurboSize;
InductorRPM = Mathf.Round(Mathf.Lerp(InductorRPM,MaxInductorRPM*(rpmFloat/(float)MaxRPM),(Time.fixedDeltaTime*TurboSpoolSpeed)/TurboSize));
currentInductorBoost = Mathf.Round(10*ExhaustPressure*(InductorRPM/MaxInductorRPM)*TurboEfficiencyCurve.Evaluate(InductorRPM/MaxInductorRPM)*TurboSize)/10;
MaxInductorBoostAmount = (Mathf.Round(10*ExhaustPressure*(MaximaArgument+0.001f)*InductionCurveMaxima()*TurboSize)/100)+1;
MaxInductorBoostInBar = (MaxInductorBoostAmount-1)*10;
InductorBoostAmount = (currentInductorBoost/10)+1;
}
float InductionCurveMaxima()
{
if(TurboEfficiencyCurve.GetHashCode() != TurboEfficiencyHash)
{
float maxVal = 0;
int samples = 1000;
for (int i = 0; i < samples; i++)
{
float time = (i / (float)(samples - 1));
float value = TurboEfficiencyCurve.Evaluate(time);
if (value > maxVal)
{
maxVal = value;
TurboEfficiencyMaxima=maxVal;
MaximaArgument=time;
}
}
TurboEfficiencyHash = TurboEfficiencyCurve.GetHashCode();
return maxVal;
}
else
{
TurboEfficiencyHash = TurboEfficiencyCurve.GetHashCode();
return TurboEfficiencyMaxima;
}
}