void tune_at_pid_fast(Config.CascadeConfigFast cfg, float AV, float AM, float MaxAA, float iMaxAA, float iErr) { var atP_iErr = Mathf.Pow(Utils.ClampL(iErr - cfg.atP_ErrThreshold, 0), cfg.atP_ErrCurve); if (MaxAA >= 1) { atPID.P = Utils.ClampH(1 + cfg.atP_HighAA_Scale * Mathf.Pow(MaxAA, cfg.atP_HighAA_Curve) + atP_iErr, cfg.atP_HighAA_Max); atPID.D = cfg.atD_HighAA_Scale * Mathf.Pow(iMaxAA, cfg.atD_HighAA_Curve) * Utils.ClampH(iErr + Mathf.Abs(AM), 1.2f); } else { atPID.P = (1 + cfg.atP_LowAA_Scale * Mathf.Pow(MaxAA, cfg.atP_LowAA_Curve) + atP_iErr); atPID.D = cfg.atD_LowAA_Scale * Mathf.Pow(iMaxAA, cfg.atD_LowAA_Curve) * Utils.ClampH(iErr + Mathf.Abs(AM), 1.2f); } var atI_iErr = Utils.ClampL(iErr - C.FastConfig.atI_ErrThreshold, 0); if (atI_iErr <= 0 || AV < 0) { atPID.I = 0; atPID.IntegralError = 0; } else { atI_iErr = Mathf.Pow(atI_iErr, cfg.atI_ErrCurve); atPID.I = cfg.atI_Scale * MaxAA * atI_iErr / (1 + Utils.ClampL(AV, 0) * cfg.atI_AV_Scale * atI_iErr); } }
void tune_av_pid_fast(Config.CascadeConfigFast cfg, float MaxAA) { avPID.P = Utils.ClampL(cfg.avP_MaxAA_Intersect - cfg.avP_MaxAA_Inclination * Mathf.Pow(MaxAA, cfg.avP_MaxAA_Curve), cfg.avP_Min); avPID.I = cfg.avI_Scale * avPID.P; avPID.D = 0; }