public static ConfigNode PIDnode(string name, int index, RSASPreset preset)
        {
            ConfigNode node = new ConfigNode(name);

            node.AddValue(pGain, preset.PIDGains[index, 0]);
            node.AddValue(iGain, preset.PIDGains[index, 1]);
            node.AddValue(dGain, preset.PIDGains[index, 2]);
            return(node);
        }
 public static void initDefaultPresets(RSASPreset p)
 {
     initDefaultPresets();
     if (ReferenceEquals(Instance.craftPresetDict[craftDefaultName].RSASPreset, null))
     {
         Instance.craftPresetDict[craftDefaultName].RSASPreset = p;
     }
     PresetManager.saveDefaults();
 }
        public static ConfigNode RSASPresetNode(RSASPreset preset)
        {
            ConfigNode node = new ConfigNode(rsasPresetNodeName);

            node.AddValue("name", preset.name);
            node.AddNode(PIDnode(aileronCtrlr, (int)SASList.Bank, preset));
            node.AddNode(PIDnode(rudderCtrlr, (int)SASList.Hdg, preset));
            node.AddNode(PIDnode(elevCtrlr, (int)SASList.Pitch, preset));

            return(node);
        }
        public static void loadRSASPreset(RSASPreset p, Stock_SAS instance)
        {
            instance.vesModule.vesselRef.Autopilot.RSAS.pidPitch.ReinitializePIDsOnly((float)p.PIDGains[(int)SASList.Pitch, 0], (float)p.PIDGains[(int)SASList.Pitch, 1], (float)p.PIDGains[(int)SASList.Pitch, 2]);
            instance.vesModule.vesselRef.Autopilot.RSAS.pidRoll.ReinitializePIDsOnly((float)p.PIDGains[(int)SASList.Bank, 0], (float)p.PIDGains[(int)SASList.Bank, 1], (float)p.PIDGains[(int)SASList.Bank, 2]);
            instance.vesModule.vesselRef.Autopilot.RSAS.pidYaw.ReinitializePIDsOnly((float)p.PIDGains[(int)SASList.Hdg, 0], (float)p.PIDGains[(int)SASList.Hdg, 1], (float)p.PIDGains[(int)SASList.Hdg, 2]);

            Instance.activeRSASPreset = p;

            if (Instance.activeRSASPreset != Instance.craftPresetDict[craftDefaultName].RSASPreset)
            {
                updateCraftPreset(p, instance.vesModule.vesselRef);
            }
            saveToFile();
        }
        public static void deleteRSASPreset(RSASPreset p)
        {
            GeneralUI.postMessage("Deleted preset " + p.name);
            if (Instance.activeRSASPreset == p)
            {
                Instance.activeRSASPreset = null;
            }
            Instance.RSASPresetList.Remove(p);

            foreach (KeyValuePair <string, CraftPreset> cp in instance.craftPresetDict)
            {
                if (!ReferenceEquals(cp.Value, null) && cp.Value.RSASPreset == p)
                {
                    cp.Value.SASPreset = null;
                }
            }

            p = null;
            saveToFile();
        }
        public static void newRSASPreset(ref string name, Vessel v)
        {
            if (string.IsNullOrEmpty(name))
            {
                return;
            }

            string nameTest = name;

            if (Instance.RSASPresetList.Any(p => p.name == nameTest))
            {
                return;
            }

            RSASPreset newPreset = new RSASPreset(v.Autopilot.RSAS, name);

            Instance.RSASPresetList.Add(newPreset);
            updateCraftPreset(newPreset, v);
            Instance.activeRSASPreset = Instance.RSASPresetList.Last();

            saveToFile();
            name = "";
        }
 public static void updateCraftPreset(RSASPreset p, Vessel v)
 {
     initCraftPreset(v);
     Instance.craftPresetDict[v.vesselName].RSASPreset = p;
 }
 public static void updateCraftPreset(RSASPreset p, Vessel v)
 {
     initCraftPreset(v);
     Instance.craftPresetDict[v.vesselName].RSASPreset = p;
 }
        public static void loadPresetsFromFile()
        {
            AsstPreset asstDefault = null;
            SASPreset  SASDefault  = null;
            SSASPreset SSASDefault = null;
            RSASPreset RSASDefault = null;

            foreach (ConfigNode node in GameDatabase.Instance.GetConfigNodes(asstPresetNodeName))
            {
                if (ReferenceEquals(node, null))
                {
                    continue;
                }

                List <double[]> gains = new List <double[]>();
                gains.Add(controllerGains(node.GetNode(hdgCtrlr), AsstList.HdgBank));
                gains.Add(controllerGains(node.GetNode(yawCtrlr), AsstList.BankToYaw));
                gains.Add(controllerGains(node.GetNode(aileronCtrlr), AsstList.Aileron));
                gains.Add(controllerGains(node.GetNode(rudderCtrlr), AsstList.Rudder));
                gains.Add(controllerGains(node.GetNode(altCtrlr), AsstList.Altitude));
                gains.Add(controllerGains(node.GetNode(vertCtrlr), AsstList.VertSpeed));
                gains.Add(controllerGains(node.GetNode(elevCtrlr), AsstList.Elevator));
                gains.Add(controllerGains(node.GetNode(speedCtrlr), AsstList.Speed));
                gains.Add(controllerGains(node.GetNode(accelCtrlr), AsstList.Acceleration));

                string name = node.GetValue("name");
                if (name == asstDefaultName)
                {
                    asstDefault = new AsstPreset(gains, name);
                }
                else if (!instance.AsstPresetList.Any(p => p.name == name))
                {
                    instance.AsstPresetList.Add(new AsstPreset(gains, name));
                }
            }

            foreach (ConfigNode node in GameDatabase.Instance.GetConfigNodes(sasPresetNodeName))
            {
                if (ReferenceEquals(node, null) || node.GetValue("stock") == "false")
                {
                    continue;
                }

                List <double[]> gains = new List <double[]>();
                gains.Add(controllerSASGains(node.GetNode(elevCtrlr), SASList.Pitch));
                gains.Add(controllerSASGains(node.GetNode(aileronCtrlr), SASList.Bank));
                gains.Add(controllerSASGains(node.GetNode(rudderCtrlr), SASList.Hdg));

                string name = node.GetValue("name");
                if (name == SASDefaultName)
                {
                    SASDefault = new SASPreset(gains, name);
                }
                else if (!instance.SASPresetList.Any(p => p.name == name))
                {
                    instance.SASPresetList.Add(new SASPreset(gains, name));
                }
            }

            foreach (ConfigNode node in GameDatabase.Instance.GetConfigNodes(ssasPresetNodeName))
            {
                if (ReferenceEquals(node, null))
                {
                    continue;
                }

                List <double[]> gains = new List <double[]>();
                gains.Add(controllerSASGains(node.GetNode(elevCtrlr), SASList.Pitch));
                gains.Add(controllerSASGains(node.GetNode(aileronCtrlr), SASList.Bank));
                gains.Add(controllerSASGains(node.GetNode(rudderCtrlr), SASList.Hdg));

                string name = node.GetValue("name");
                if (name == ssasDefaultName)
                {
                    SSASDefault = new SSASPreset(gains, name);
                }
                else if (!instance.SSASPresetList.Any(p => p.name == name))
                {
                    instance.SSASPresetList.Add(new SSASPreset(gains, name));
                }
            }

            foreach (ConfigNode node in GameDatabase.Instance.GetConfigNodes(rsasPresetNodeName))
            {
                if (ReferenceEquals(node, null))
                {
                    continue;
                }

                List <double[]> gains = new List <double[]>();
                gains.Add(controllerSASGains(node.GetNode(elevCtrlr), SASList.Pitch));
                gains.Add(controllerSASGains(node.GetNode(aileronCtrlr), SASList.Bank));
                gains.Add(controllerSASGains(node.GetNode(rudderCtrlr), SASList.Hdg));

                string name = node.GetValue("name");
                if (name == RSASDefaultName)
                {
                    RSASDefault = new RSASPreset(gains, name);
                }
                else if (!instance.RSASPresetList.Any(p => p.name == name))
                {
                    instance.RSASPresetList.Add(new RSASPreset(gains, name));
                }
            }

            foreach (ConfigNode node in GameDatabase.Instance.GetConfigNodes(craftPresetNodeName))
            {
                if (ReferenceEquals(node, null) || instance.craftPresetDict.ContainsKey(node.GetValue("name")))
                {
                    continue;
                }

                string name = node.GetValue("name");
                if (name == craftDefaultName)
                {
                    instance.craftPresetDict.Add(craftDefaultName, new CraftPreset(craftDefaultName, asstDefault, SSASDefault, SASDefault, RSASDefault));
                }
                else
                {
                    CraftPreset cP = new CraftPreset(name,
                                                     instance.AsstPresetList.FirstOrDefault(p => p.name == node.GetValue(craftAsstKey)),
                                                     instance.SSASPresetList.FirstOrDefault(p => p.name == node.GetValue(craftSSASKey)),
                                                     instance.SASPresetList.FirstOrDefault(p => p.name == node.GetValue(craftSASKey)),
                                                     instance.RSASPresetList.FirstOrDefault(p => p.name == node.GetValue(craftRSASKey)));

                    instance.craftPresetDict.Add(cP.Name, cP);
                }
            }
        }
 public static ConfigNode PIDnode(string name, int index, RSASPreset preset)
 {
     ConfigNode node = new ConfigNode(name);
     node.AddValue(pGain, preset.PIDGains[index, 0]);
     node.AddValue(iGain, preset.PIDGains[index, 1]);
     node.AddValue(dGain, preset.PIDGains[index, 2]);
     return node;
 }
        public static ConfigNode RSASPresetNode(RSASPreset preset)
        {
            ConfigNode node = new ConfigNode(rsasPresetNodeName);
            node.AddValue("name", preset.name);
            node.AddNode(PIDnode(aileronCtrlr, (int)SASList.Bank, preset));
            node.AddNode(PIDnode(rudderCtrlr, (int)SASList.Hdg, preset));
            node.AddNode(PIDnode(elevCtrlr, (int)SASList.Pitch, preset));

            return node;
        }
        public static void newRSASPreset(ref string name, Vessel v)
        {
            if (string.IsNullOrEmpty(name))
                return;

            string nameTest = name;
            if (Instance.RSASPresetList.Any(p => p.name == nameTest))
                return;

            RSASPreset newPreset = new RSASPreset(v.Autopilot.RSAS, name);
            Instance.RSASPresetList.Add(newPreset);
            updateCraftPreset(newPreset, v);
            Instance.activeRSASPreset = Instance.RSASPresetList.Last();

            saveToFile();
            name = "";
        }
        public static void loadRSASPreset(RSASPreset p, Stock_SAS instance)
        {
            instance.vesModule.vesselRef.Autopilot.RSAS.pidPitch.ReinitializePIDsOnly((float)p.PIDGains[(int)SASList.Pitch, 0], (float)p.PIDGains[(int)SASList.Pitch, 1], (float)p.PIDGains[(int)SASList.Pitch, 2]);
            instance.vesModule.vesselRef.Autopilot.RSAS.pidRoll.ReinitializePIDsOnly((float)p.PIDGains[(int)SASList.Bank, 0], (float)p.PIDGains[(int)SASList.Bank, 1], (float)p.PIDGains[(int)SASList.Bank, 2]);
            instance.vesModule.vesselRef.Autopilot.RSAS.pidYaw.ReinitializePIDsOnly((float)p.PIDGains[(int)SASList.Hdg, 0], (float)p.PIDGains[(int)SASList.Hdg, 1], (float)p.PIDGains[(int)SASList.Hdg, 2]);

            Instance.activeRSASPreset = p;

            if (Instance.activeRSASPreset != Instance.craftPresetDict[craftDefaultName].RSASPreset)
                updateCraftPreset(p, instance.vesModule.vesselRef);
            saveToFile();
        }
        public static void loadPresetsFromFile()
        {
            AsstPreset asstDefault = null;
            SASPreset SASDefault = null;
            SSASPreset SSASDefault = null;
            RSASPreset RSASDefault = null;

            foreach (ConfigNode node in GameDatabase.Instance.GetConfigNodes(asstPresetNodeName))
            {
                if (ReferenceEquals(node, null))
                    continue;

                List<double[]> gains = new List<double[]>();
                gains.Add(controllerGains(node.GetNode(hdgCtrlr), AsstList.HdgBank));
                gains.Add(controllerGains(node.GetNode(yawCtrlr), AsstList.BankToYaw));
                gains.Add(controllerGains(node.GetNode(aileronCtrlr), AsstList.Aileron));
                gains.Add(controllerGains(node.GetNode(rudderCtrlr), AsstList.Rudder));
                gains.Add(controllerGains(node.GetNode(altCtrlr), AsstList.Altitude));
                gains.Add(controllerGains(node.GetNode(vertCtrlr), AsstList.VertSpeed));
                gains.Add(controllerGains(node.GetNode(elevCtrlr), AsstList.Elevator));
                gains.Add(controllerGains(node.GetNode(speedCtrlr), AsstList.Speed));
                gains.Add(controllerGains(node.GetNode(accelCtrlr), AsstList.Acceleration));

                string name = node.GetValue("name");
                if (name == asstDefaultName)
                    asstDefault = new AsstPreset(gains, name);
                else if (!instance.AsstPresetList.Any(p => p.name == name))
                    instance.AsstPresetList.Add(new AsstPreset(gains, name));
            }

            foreach (ConfigNode node in GameDatabase.Instance.GetConfigNodes(sasPresetNodeName))
            {
                if (ReferenceEquals(node, null) || node.GetValue("stock") == "false")
                    continue;

                List<double[]> gains = new List<double[]>();
                gains.Add(controllerSASGains(node.GetNode(elevCtrlr), SASList.Pitch));
                gains.Add(controllerSASGains(node.GetNode(aileronCtrlr), SASList.Bank));
                gains.Add(controllerSASGains(node.GetNode(rudderCtrlr), SASList.Hdg));

                string name = node.GetValue("name");
                if (name == SASDefaultName)
                    SASDefault = new SASPreset(gains, name);
                else if (!instance.SASPresetList.Any(p => p.name == name))
                    instance.SASPresetList.Add(new SASPreset(gains, name));
            }

            foreach (ConfigNode node in GameDatabase.Instance.GetConfigNodes(ssasPresetNodeName))
            {
                if (ReferenceEquals(node, null))
                    continue;

                List<double[]> gains = new List<double[]>();
                gains.Add(controllerSASGains(node.GetNode(elevCtrlr), SASList.Pitch));
                gains.Add(controllerSASGains(node.GetNode(aileronCtrlr), SASList.Bank));
                gains.Add(controllerSASGains(node.GetNode(rudderCtrlr), SASList.Hdg));

                string name = node.GetValue("name");
                if (name == ssasDefaultName)
                    SSASDefault = new SSASPreset(gains, name);
                else if (!instance.SSASPresetList.Any(p => p.name == name))
                    instance.SSASPresetList.Add(new SSASPreset(gains, name));
            }

            foreach (ConfigNode node in GameDatabase.Instance.GetConfigNodes(rsasPresetNodeName))
            {
                if (ReferenceEquals(node, null))
                    continue;

                List<double[]> gains = new List<double[]>();
                gains.Add(controllerSASGains(node.GetNode(elevCtrlr), SASList.Pitch));
                gains.Add(controllerSASGains(node.GetNode(aileronCtrlr), SASList.Bank));
                gains.Add(controllerSASGains(node.GetNode(rudderCtrlr), SASList.Hdg));

                string name = node.GetValue("name");
                if (name == RSASDefaultName)
                    RSASDefault = new RSASPreset(gains, name);
                else if (!instance.RSASPresetList.Any(p => p.name == name))
                    instance.RSASPresetList.Add(new RSASPreset(gains, name));
            }

            foreach (ConfigNode node in GameDatabase.Instance.GetConfigNodes(craftPresetNodeName))
            {
                if (ReferenceEquals(node, null) || instance.craftPresetDict.ContainsKey(node.GetValue("name")))
                    continue;

                string name = node.GetValue("name");
                if (name == craftDefaultName)
                    instance.craftPresetDict.Add(craftDefaultName, new CraftPreset(craftDefaultName, asstDefault, SSASDefault, SASDefault, RSASDefault));
                else
                {
                    CraftPreset cP = new CraftPreset(name,
                                            instance.AsstPresetList.FirstOrDefault(p => p.name == node.GetValue(craftAsstKey)),
                                            instance.SSASPresetList.FirstOrDefault(p => p.name == node.GetValue(craftSSASKey)),
                                            instance.SASPresetList.FirstOrDefault(p => p.name == node.GetValue(craftSASKey)),
                                            instance.RSASPresetList.FirstOrDefault(p => p.name == node.GetValue(craftRSASKey)));

                    instance.craftPresetDict.Add(cP.Name, cP);
                }
            }
        }
 public static void initDefaultPresets(RSASPreset p)
 {
     initDefaultPresets();
     if (ReferenceEquals(Instance.craftPresetDict[craftDefaultName].RSASPreset, null))
         Instance.craftPresetDict[craftDefaultName].RSASPreset = p;
     PresetManager.saveDefaults();
 }
        public static void deleteRSASPreset(RSASPreset p)
        {
            GeneralUI.postMessage("Deleted preset " + p.name);
            if (Instance.activeRSASPreset == p)
                Instance.activeRSASPreset = null;
            Instance.RSASPresetList.Remove(p);

            foreach (KeyValuePair<string, CraftPreset> cp in instance.craftPresetDict)
            {
                if (!ReferenceEquals(cp.Value, null) && cp.Value.RSASPreset == p)
                    cp.Value.SASPreset = null;
            }

            p = null;
            saveToFile();
        }