public override float Calculate(ref RegenDataInfo data) { // d = v0*t + (a*t^2)/2 -> 0 = (a*t^2)/2 + v0*t - d float maxRegenRate = 2f * data.regenRate; float regenChangeRate = -maxRegenRate / data.originalRegenTime; if (SolveForFactors(regenChangeRate / 2f, maxRegenRate, -data.agent.Health, out float t1, out float t2)) { if (t1 >= 0f && t1 < data.regenTime) { return(maxRegenRate * (data.regenTime - t1) / data.regenTime); } else if (t2 >= 0f && t2 < data.regenTime) { return(maxRegenRate * (data.regenTime - t2) / data.regenTime); } } return(0f); }
public override float Calculate(ref RegenDataInfo data) { float healthToMaxRatio = data.agent.Health / data.agent.HealthLimit; return(10f * data.regenRate * (MathF.Sqrt(healthToMaxRatio) - healthToMaxRatio)); }
// You must define this method as it is called by the game when regenerating. public override float Calculate(ref RegenDataInfo data) { return(data.regenRate); }