/// <summary> /// loads a preset into the controllers of a PA instance /// </summary> /// <param name="p">the preset to load</param> /// <param name="asstInstance">the PA instance to load to</param> public static void LoadAsstPreset(AsstPreset p, PilotAssistant asstInstance) { if (ReferenceEquals(p, null)) { return; } Asst_PID_Controller[] c = asstInstance.controllers; for (int i = 0; i < 8; i++) { c[i].K_proportional = p.PIDGains[i][0]; c[i].K_integral = p.PIDGains[i][1]; c[i].K_derivative = p.PIDGains[i][2]; c[i].OutMin = p.PIDGains[i][3]; c[i].OutMax = p.PIDGains[i][4]; c[i].IntegralClampLower = p.PIDGains[i][5]; c[i].IntegralClampUpper = p.PIDGains[i][6]; c[i].Scalar = p.PIDGains[i][7]; c[i].Easing = p.PIDGains[i][8]; } asstInstance.activePreset = p; GeneralUI.PostMessage("Loaded preset " + p.name); if (asstInstance.activePreset.name != Instance.craftPresetDict[craftDefaultName]) { Instance.UpdateCraftPreset(asstInstance.activePreset, asstInstance.vesModule.Vessel); } SaveToFile(); }
/// <summary> /// remove a preset from the stored list and remove any references to it on active vessels /// </summary> /// <param name="p"></param> public void DeleteAsstPreset(AsstPreset p) { GeneralUI.PostMessage("Deleted preset " + p.name); foreach (AsstVesselModule avm in PilotAssistantFlightCore.Instance.controlledVessels) { if (avm.vesselAsst.activePreset == p) { avm.vesselAsst.activePreset = null; } } var toRemove = new List <string>(); foreach (KeyValuePair <string, string> kvp in craftPresetDict) { if (kvp.Value == p.name) { toRemove.Add(kvp.Key); } } foreach (string s in toRemove) { craftPresetDict.Remove(s); } AsstPresetList.Remove(p); p = null; SaveToFile(); }
/// <summary> /// Creates a preset from an array of controllers. Can't access Asst controllers directly because more than one instance can be active /// </summary> /// <param name="name">preset name</param> /// <param name="controllers">controllers to build from</param> /// <param name="v">vessel to associate with</param> public static bool NewAsstPreset(string name, Asst_PID_Controller[] controllers, Vessel v) { if (string.IsNullOrEmpty(name)) { return(false); } if (Instance.AsstPresetList.Any(p => p.name == name)) { GeneralUI.PostMessage("Failed to add preset with duplicate name"); return(false); } var newPreset = new AsstPreset(controllers, name); Instance.UpdateCraftPreset(newPreset, v); Instance.AsstPresetList.Add(newPreset); SaveToFile(); return(true); // new preset created successfully, can clear the string }