public KCT_Preset(KCT_Preset Source) { name = Source.name; shortName = Source.shortName; description = Source.description; author = Source.author; AllowDeletion = Source.AllowDeletion; CareerEnabled = Source.CareerEnabled; ScienceEnabled = Source.ScienceEnabled; SandboxEnabled = Source.SandboxEnabled; // generalSettings = Source.generalSettings; //timeSettings = Source.timeSettings; //formulaSettings = Source.formulaSettings; ConfigNode.LoadObjectFromConfig(generalSettings, Source.generalSettings.AsConfigNode()); ConfigNode.LoadObjectFromConfig(timeSettings, Source.timeSettings.AsConfigNode()); ConfigNode.LoadObjectFromConfig(formulaSettings, Source.formulaSettings.AsConfigNode()); partVariables.FromConfigNode(Source.partVariables.AsConfigNode()); }
public static void DrawPresetSaveWindow(int windowID) { GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); GUILayout.Label("Preset name:"); saveName = GUILayout.TextField(saveName, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Preset short name:"); saveShort = GUILayout.TextField(saveShort, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Preset author(s):"); saveAuthor = GUILayout.TextField(saveAuthor, GUILayout.Width(100)); GUILayout.EndHorizontal(); //GUILayout.BeginHorizontal(); GUILayout.Label("Preset description:"); saveDesc = GUILayout.TextField(saveDesc, GUILayout.Width(220)); //GUILayout.EndHorizontal(); saveCareer = GUILayout.Toggle(saveCareer, " Show in Career Games"); saveScience = GUILayout.Toggle(saveScience, " Show in Science Games"); saveSandbox = GUILayout.Toggle(saveSandbox, " Show in Sandbox Games"); KCT_Preset existing = KCT_PresetManager.Instance.FindPresetByShortName(saveShort); bool AlreadyExists = existing != null; bool CanOverwrite = AlreadyExists ? existing.AllowDeletion : true; if (AlreadyExists) { GUILayout.Label("Warning: A preset with that short name already exists!"); } GUILayout.BeginHorizontal(); if (CanOverwrite && GUILayout.Button("Save")) { toSave.name = saveName; toSave.shortName = saveShort; toSave.description = saveDesc; toSave.author = saveAuthor; toSave.CareerEnabled = saveCareer; toSave.ScienceEnabled = saveScience; toSave.SandboxEnabled = saveSandbox; toSave.AllowDeletion = true; toSave.SaveToFile(KSPUtil.ApplicationRootPath + "/GameData/KerbalConstructionTime/KCT_Presets/" + toSave.shortName + ".cfg"); showPresetSaver = false; KCT_PresetManager.Instance.FindPresetFiles(); KCT_PresetManager.Instance.LoadPresets(); } if (GUILayout.Button("Cancel")) { showPresetSaver = false; } GUILayout.EndHorizontal(); GUILayout.EndVertical(); CenterWindow(ref presetNamingWindowPosition); }
public static void DrawPresetWindow(int windowID) { GUIStyle yellowText = new GUIStyle(GUI.skin.label); yellowText.normal.textColor = Color.yellow; if (WorkingPreset == null) { SetNewWorkingPreset(new KCT_Preset(KCT_PresetManager.Instance.ActivePreset), false); //might need to copy instead of assign here presetIndex = KCT_PresetManager.Instance.GetIndex(WorkingPreset); } GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); //preset selector GUILayout.BeginVertical(); GUILayout.Label("Presets", yellowText, GUILayout.ExpandHeight(false)); //preset toolbar in a scrollview presetScrollView = GUILayout.BeginScrollView(presetScrollView, GUILayout.Width(presetPosition.width / 6.0f)); //TODO: update HighLogic.Skin.textArea string[] presetShortNames = KCT_PresetManager.Instance.PresetShortNames(true); if (presetIndex == -1) { SetNewWorkingPreset(null, true); } if (changed && presetIndex < presetShortNames.Length - 1 && !KCT_Utilities.ConfigNodesAreEquivalent(WorkingPreset.AsConfigNode(), KCT_PresetManager.Instance.Presets[presetIndex].AsConfigNode())) //!KCT_PresetManager.Instance.PresetsEqual(WorkingPreset, KCT_PresetManager.Instance.Presets[presetIndex], true) { SetNewWorkingPreset(null, true); } int prev = presetIndex; presetIndex = GUILayout.SelectionGrid(presetIndex, presetShortNames, 1); if (prev != presetIndex) //If a new preset was selected { if (presetIndex != presetShortNames.Length - 1) { SetNewWorkingPreset(new KCT_Preset(KCT_PresetManager.Instance.Presets[presetIndex]), false); } else { SetNewWorkingPreset(null, true); } } //presetIndex = GUILayout.Toolbar(presetIndex, presetNames); GUILayout.EndScrollView(); if (GUILayout.Button("Save as\nNew Preset", GUILayout.ExpandHeight(false))) { //create new preset SaveAsNewPreset(WorkingPreset); } if (WorkingPreset.AllowDeletion && presetIndex != presetShortNames.Length - 1 && GUILayout.Button("Delete Preset")) //allowed to be deleted and isn't Custom { DialogGUIBase[] options = new DialogGUIBase[2]; options[0] = new DialogGUIButton("Delete File", DeleteActivePreset); options[1] = new DialogGUIButton("Cancel", DummyVoid); MultiOptionDialog dialog = new MultiOptionDialog("deletePresetPopup", "Are you sure you want to delete the selected Preset, file and all? This cannot be undone!", "Confirm Deletion", null, options); PopupDialog.SpawnPopupDialog(new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), dialog, false, HighLogic.UISkin); } GUILayout.EndVertical(); //Main sections GUILayout.BeginVertical(); presetMainScroll = GUILayout.BeginScrollView(presetMainScroll); //Preset info section) GUILayout.BeginVertical(HighLogic.Skin.textArea); GUILayout.Label("Preset Name: " + WorkingPreset.name); GUILayout.Label("Description: " + WorkingPreset.description); GUILayout.Label("Author(s): " + WorkingPreset.author); GUILayout.EndVertical(); GUILayout.BeginHorizontal(); //Features section GUILayout.BeginVertical(); GUILayout.Label("Features", yellowText); GUILayout.BeginVertical(HighLogic.Skin.textArea); WorkingPreset.generalSettings.Enabled = GUILayout.Toggle(WorkingPreset.generalSettings.Enabled, "Mod Enabled", HighLogic.Skin.button); WorkingPreset.generalSettings.BuildTimes = GUILayout.Toggle(WorkingPreset.generalSettings.BuildTimes, "Build Times", HighLogic.Skin.button); WorkingPreset.generalSettings.ReconditioningTimes = GUILayout.Toggle(WorkingPreset.generalSettings.ReconditioningTimes, "Launchpad Reconditioning", HighLogic.Skin.button); WorkingPreset.generalSettings.ReconditioningBlocksPad = GUILayout.Toggle(WorkingPreset.generalSettings.ReconditioningBlocksPad, "Reconditioning Blocks Pad", HighLogic.Skin.button); WorkingPreset.generalSettings.TechUnlockTimes = GUILayout.Toggle(WorkingPreset.generalSettings.TechUnlockTimes, "Tech Unlock Times", HighLogic.Skin.button); WorkingPreset.generalSettings.KSCUpgradeTimes = GUILayout.Toggle(WorkingPreset.generalSettings.KSCUpgradeTimes, "KSC Upgrade Times", HighLogic.Skin.button); WorkingPreset.generalSettings.TechUpgrades = GUILayout.Toggle(WorkingPreset.generalSettings.TechUpgrades, "Upgrades From Tech Tree", HighLogic.Skin.button); WorkingPreset.generalSettings.SharedUpgradePool = GUILayout.Toggle(WorkingPreset.generalSettings.SharedUpgradePool, "Shared Upgrade Pool (KSCSwitcher)", HighLogic.Skin.button); GUILayout.BeginHorizontal(); GUILayout.Label("Starting Upgrades:"); WorkingPreset.generalSettings.StartingPoints = GUILayout.TextField(WorkingPreset.generalSettings.StartingPoints, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.EndVertical(); //end Features GUILayout.BeginVertical(); //Begin time settings GUILayout.Label("Time Settings", yellowText); GUILayout.BeginVertical(HighLogic.Skin.textArea); GUILayout.BeginHorizontal(); GUILayout.Label("Overall Multiplier: "); double.TryParse(OMultTmp = GUILayout.TextField(OMultTmp, 10, GUILayout.Width(80)), out WorkingPreset.timeSettings.OverallMultiplier); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Build Effect: "); double.TryParse(BEffTmp = GUILayout.TextField(BEffTmp, 10, GUILayout.Width(80)), out WorkingPreset.timeSettings.BuildEffect); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Inventory Effect: "); double.TryParse(IEffTmp = GUILayout.TextField(IEffTmp, 10, GUILayout.Width(80)), out WorkingPreset.timeSettings.InventoryEffect); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Reconditioning Effect: "); double.TryParse(ReEffTmp = GUILayout.TextField(ReEffTmp, 10, GUILayout.Width(80)), out WorkingPreset.timeSettings.ReconditioningEffect); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Max Reconditioning: "); double.TryParse(MaxReTmp = GUILayout.TextField(MaxReTmp, 10, GUILayout.Width(80)), out WorkingPreset.timeSettings.MaxReconditioning); GUILayout.EndHorizontal(); GUILayout.Label("Rollout-Reconditioning Split:"); GUILayout.BeginHorizontal(); //GUILayout.Label("Rollout", GUILayout.ExpandWidth(false)); WorkingPreset.timeSettings.RolloutReconSplit = GUILayout.HorizontalSlider((float)Math.Floor(WorkingPreset.timeSettings.RolloutReconSplit * 100f), 0, 100) / 100.0; //GUILayout.Label("Recon.", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.Label((Math.Floor(WorkingPreset.timeSettings.RolloutReconSplit * 100)) + "% Rollout, " + (100 - Math.Floor(WorkingPreset.timeSettings.RolloutReconSplit * 100)) + "% Reconditioning"); GUILayout.EndVertical(); //end time settings GUILayout.EndVertical(); GUILayout.EndHorizontal(); //end feature/time setting split //begin formula settings GUILayout.BeginVertical(); GUILayout.Label("Formula Settings (Advanced)", yellowText); GUILayout.BeginVertical(HighLogic.Skin.textArea); GUILayout.BeginHorizontal(); if (GUILayout.Button("Show/Hide Formulas")) { showFormula = !showFormula; } if (GUILayout.Button("View Wiki in Browser")) { Application.OpenURL("https://github.com/magico13/KCT/wiki"); } GUILayout.EndHorizontal(); if (showFormula) { //show half here, half on other side? Or all in one big list int textWidth = 350; GUILayout.BeginHorizontal(); GUILayout.Label("NodeFormula: "); WorkingPreset.formulaSettings.NodeFormula = GUILayout.TextField(WorkingPreset.formulaSettings.NodeFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("UpgradeFunds: "); WorkingPreset.formulaSettings.UpgradeFundsFormula = GUILayout.TextField(WorkingPreset.formulaSettings.UpgradeFundsFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("UpgradeScience: "); WorkingPreset.formulaSettings.UpgradeScienceFormula = GUILayout.TextField(WorkingPreset.formulaSettings.UpgradeScienceFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("UpgradesForScience: "); WorkingPreset.formulaSettings.UpgradesForScience = GUILayout.TextField(WorkingPreset.formulaSettings.UpgradesForScience, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("ResearchFormula: "); WorkingPreset.formulaSettings.ResearchFormula = GUILayout.TextField(WorkingPreset.formulaSettings.ResearchFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("EffectivePart: "); WorkingPreset.formulaSettings.EffectivePartFormula = GUILayout.TextField(WorkingPreset.formulaSettings.EffectivePartFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("ProceduralPart: "); WorkingPreset.formulaSettings.ProceduralPartFormula = GUILayout.TextField(WorkingPreset.formulaSettings.ProceduralPartFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("BPFormula: "); WorkingPreset.formulaSettings.BPFormula = GUILayout.TextField(WorkingPreset.formulaSettings.BPFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("KSCUpgrade: "); WorkingPreset.formulaSettings.KSCUpgradeFormula = GUILayout.TextField(WorkingPreset.formulaSettings.KSCUpgradeFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Reconditioning: "); WorkingPreset.formulaSettings.ReconditioningFormula = GUILayout.TextField(WorkingPreset.formulaSettings.ReconditioningFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("BuildRate: "); WorkingPreset.formulaSettings.BuildRateFormula = GUILayout.TextField(WorkingPreset.formulaSettings.BuildRateFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("UpgradeReset: "); WorkingPreset.formulaSettings.UpgradeResetFormula = GUILayout.TextField(WorkingPreset.formulaSettings.UpgradeResetFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("InventorySale: "); WorkingPreset.formulaSettings.InventorySaleFormula = GUILayout.TextField(WorkingPreset.formulaSettings.InventorySaleFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("RolloutCosts: "); WorkingPreset.formulaSettings.RolloutCostFormula = GUILayout.TextField(WorkingPreset.formulaSettings.RolloutCostFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("NewLaunchPadCost: "); WorkingPreset.formulaSettings.NewLaunchPadCostFormula = GUILayout.TextField(WorkingPreset.formulaSettings.NewLaunchPadCostFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); } GUILayout.EndVertical(); GUILayout.EndVertical(); //end formula settings GUILayout.EndScrollView(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Save", GUILayout.ExpandWidth(false))) { KCT_PresetManager.Instance.ActivePreset = WorkingPreset; KCT_PresetManager.Instance.SaveActiveToSaveData(); WorkingPreset = null; showSettings = false; if (!KCT_PresetManager.Instance.ActivePreset.generalSettings.Enabled) { KCT_Utilities.DisableModFunctionality(); } //KCT_GameStates.settings.enabledForSave = KCT_PresetManager.Instance.ActivePreset.generalSettings.Enabled; KCT_GameStates.settings.MaxTimeWarp = newTimewarp; KCT_GameStates.settings.ForceStopWarp = forceStopWarp; KCT_GameStates.settings.DisableAllMessages = disableAllMsgs; KCT_GameStates.settings.OverrideLaunchButton = overrideLaunchBtn; KCT_GameStates.settings.Debug = debug; KCT_GameStates.settings.AutoKACAlarms = autoAlarms; KCT_GameStates.settings.PreferBlizzyToolbar = useBlizzyToolbar; KCT_GameStates.settings.CheckForDebugUpdates = debugUpdateChecking; KCT_GameStates.settings.Save(); showSettings = false; if (!PrimarilyDisabled && !showFirstRun) { ResetBLWindow(); if (KCT_Events.instance.KCTButtonStock != null) { KCT_Events.instance.KCTButtonStock.SetTrue(); } else { showBuildList = true; } } if (!KCT_PresetManager.Instance.ActivePreset.generalSettings.Enabled) { InputLockManager.RemoveControlLock("KCTKSCLock"); } for (int j = 0; j < KCT_GameStates.TechList.Count; j++) { KCT_GameStates.TechList[j].UpdateBuildRate(j); } foreach (KCT_KSC ksc in KCT_GameStates.KSCs) { ksc.RecalculateBuildRates(); ksc.RecalculateUpgradedBuildRates(); } KCT_GUI.ResetFormulaRateHolders(); } if (GUILayout.Button("Cancel", GUILayout.ExpandWidth(false))) { WorkingPreset = null; showSettings = false; if (!PrimarilyDisabled && !showFirstRun) { ResetBLWindow(); if (KCT_Events.instance.KCTButtonStock != null) { KCT_Events.instance.KCTButtonStock.SetTrue(); } else { showBuildList = true; } } for (int j = 0; j < KCT_GameStates.TechList.Count; j++) { KCT_GameStates.TechList[j].UpdateBuildRate(j); } } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.EndVertical(); //end column 2 GUILayout.BeginVertical(GUILayout.Width(100)); //Start general settings GUILayout.Label("General Settings", yellowText); GUILayout.Label("NOTE: Affects all saves!", yellowText); GUILayout.BeginVertical(HighLogic.Skin.textArea); GUILayout.Label("Max Timewarp"); GUILayout.BeginHorizontal(); if (GUILayout.Button("-", GUILayout.ExpandWidth(false))) { newTimewarp = Math.Max(newTimewarp - 1, 0); } //current warp setting GUILayout.Label(TimeWarp.fetch.warpRates[newTimewarp] + "x"); if (GUILayout.Button("+", GUILayout.ExpandWidth(false))) { newTimewarp = Math.Min(newTimewarp + 1, TimeWarp.fetch.warpRates.Length - 1); } GUILayout.EndHorizontal(); forceStopWarp = GUILayout.Toggle(forceStopWarp, "Auto Stop TimeWarp", HighLogic.Skin.button); autoAlarms = GUILayout.Toggle(autoAlarms, "Auto KAC Alarms", HighLogic.Skin.button); overrideLaunchBtn = GUILayout.Toggle(overrideLaunchBtn, "Override Launch Button", HighLogic.Skin.button); useBlizzyToolbar = GUILayout.Toggle(useBlizzyToolbar, "Use Toolbar Mod", HighLogic.Skin.button); disableAllMsgs = !GUILayout.Toggle(!disableAllMsgs, "Use Message System", HighLogic.Skin.button); debug = GUILayout.Toggle(debug, "Debug Logging", HighLogic.Skin.button); #if DEBUG debugUpdateChecking = GUILayout.Toggle(debugUpdateChecking, "Check for Dev Updates", HighLogic.Skin.button); #endif GUILayout.EndVertical(); GUILayout.EndVertical(); GUILayout.EndHorizontal(); //end main split GUILayout.EndVertical(); //end window changed = GUI.changed; if (!Input.GetMouseButtonDown(1) && !Input.GetMouseButtonDown(2)) { GUI.DragWindow(); } }
public void ClearPresets() { Presets.Clear(); PresetPaths.Clear(); ActivePreset = null; }
public static void DrawPresetWindow(int windowID) { if (_workingPreset == null) { SetNewWorkingPreset(new KCT_Preset(PresetManager.Instance.ActivePreset), false); //might need to copy instead of assign here _presetIndex = PresetManager.Instance.GetIndex(_workingPreset); } GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); //preset selector GUILayout.BeginVertical(); GUILayout.Label("Presets", _yellowText, GUILayout.ExpandHeight(false)); //preset toolbar in a scrollview _presetScrollView = GUILayout.BeginScrollView(_presetScrollView, GUILayout.Width(_presetPosition.width / 6f)); //TODO: update HighLogic.Skin.textArea string[] presetShortNames = PresetManager.Instance.PresetShortNames(true); if (_presetIndex == -1) { SetNewWorkingPreset(null, true); } if (_isChanged && _presetIndex < presetShortNames.Length - 1 && !Utilities.ConfigNodesAreEquivalent(_workingPreset.AsConfigNode(), PresetManager.Instance.Presets[_presetIndex].AsConfigNode())) //!KCT_PresetManager.Instance.PresetsEqual(WorkingPreset, KCT_PresetManager.Instance.Presets[presetIndex], true) { SetNewWorkingPreset(null, true); } int prev = _presetIndex; _presetIndex = GUILayout.SelectionGrid(_presetIndex, presetShortNames, 1); if (prev != _presetIndex) //If a new preset was selected { if (_presetIndex != presetShortNames.Length - 1) { SetNewWorkingPreset(new KCT_Preset(PresetManager.Instance.Presets[_presetIndex]), false); } else { SetNewWorkingPreset(null, true); } } //presetIndex = GUILayout.Toolbar(presetIndex, presetNames); GUILayout.EndScrollView(); if (GUILayout.Button("Save as\nNew Preset", GUILayout.ExpandHeight(false))) { //create new preset SaveAsNewPreset(_workingPreset); } if (_workingPreset.AllowDeletion && _presetIndex != presetShortNames.Length - 1 && GUILayout.Button("Delete Preset")) //allowed to be deleted and isn't Custom { DialogGUIBase[] options = new DialogGUIBase[2]; options[0] = new DialogGUIButton("Delete File", DeleteActivePreset); options[1] = new DialogGUIButton("Cancel", RemoveInputLocks); MultiOptionDialog dialog = new MultiOptionDialog("deletePresetPopup", "Are you sure you want to delete the selected Preset, file and all? This cannot be undone!", "Confirm Deletion", null, options); PopupDialog.SpawnPopupDialog(new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), dialog, false, HighLogic.UISkin); } GUILayout.EndVertical(); //Main sections GUILayout.BeginVertical(); _presetMainScroll = GUILayout.BeginScrollView(_presetMainScroll); //Preset info section) GUILayout.BeginVertical(HighLogic.Skin.textArea); GUILayout.Label("Preset Name: " + _workingPreset.Name); GUILayout.Label("Description: " + _workingPreset.Description); GUILayout.Label("Author(s): " + _workingPreset.Author); GUILayout.EndVertical(); GUILayout.BeginHorizontal(); //Features section GUILayout.BeginVertical(); GUILayout.Label("Features", _yellowText); GUILayout.BeginVertical(HighLogic.Skin.textArea); _workingPreset.GeneralSettings.Enabled = GUILayout.Toggle(_workingPreset.GeneralSettings.Enabled, "Mod Enabled", HighLogic.Skin.button); _workingPreset.GeneralSettings.BuildTimes = GUILayout.Toggle(_workingPreset.GeneralSettings.BuildTimes, "Build Times", HighLogic.Skin.button); _workingPreset.GeneralSettings.ReconditioningTimes = GUILayout.Toggle(_workingPreset.GeneralSettings.ReconditioningTimes, "Launchpad Reconditioning", HighLogic.Skin.button); _workingPreset.GeneralSettings.ReconditioningBlocksPad = GUILayout.Toggle(_workingPreset.GeneralSettings.ReconditioningBlocksPad, "Reconditioning Blocks Pad", HighLogic.Skin.button); _workingPreset.GeneralSettings.TechUnlockTimes = GUILayout.Toggle(_workingPreset.GeneralSettings.TechUnlockTimes, "Tech Unlock Times", HighLogic.Skin.button); _workingPreset.GeneralSettings.KSCUpgradeTimes = GUILayout.Toggle(_workingPreset.GeneralSettings.KSCUpgradeTimes, "KSC Upgrade Times", HighLogic.Skin.button); _workingPreset.GeneralSettings.TechUpgrades = GUILayout.Toggle(_workingPreset.GeneralSettings.TechUpgrades, "Upgrades From Tech Tree", HighLogic.Skin.button); _workingPreset.GeneralSettings.SharedUpgradePool = GUILayout.Toggle(_workingPreset.GeneralSettings.SharedUpgradePool, "Shared Upgrade Pool (KSCSwitcher)", HighLogic.Skin.button); _workingPreset.GeneralSettings.CommonBuildLine = GUILayout.Toggle(_workingPreset.GeneralSettings.CommonBuildLine, "Common build line for SPH+VAB", HighLogic.Skin.button); GUILayout.BeginHorizontal(); GUILayout.Label("Starting Upgrades:"); _workingPreset.GeneralSettings.StartingPoints = GUILayout.TextField(_workingPreset.GeneralSettings.StartingPoints, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.EndVertical(); //end Features GUILayout.BeginVertical(); //Begin time settings GUILayout.Label("Time Settings", _yellowText); GUILayout.BeginVertical(HighLogic.Skin.textArea); GUILayout.BeginHorizontal(); GUILayout.BeginVertical(); GUILayout.Label("Overall Multiplier: "); double.TryParse(_oMultTmp = GUILayout.TextField(_oMultTmp, 10, GUILayout.Width(80)), out _workingPreset.TimeSettings.OverallMultiplier); GUILayout.Label("Merging Time Penalty: "); double.TryParse(_mTimePTmp = GUILayout.TextField(_mTimePTmp, 10, GUILayout.Width(80)), out _workingPreset.TimeSettings.MergingTimePenalty); GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Build Effect: "); double.TryParse(_bEffTmp = GUILayout.TextField(_bEffTmp, 10, GUILayout.Width(80)), out _workingPreset.TimeSettings.BuildEffect); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Inventory Effect: "); double.TryParse(_iEffTmp = GUILayout.TextField(_iEffTmp, 10, GUILayout.Width(80)), out _workingPreset.TimeSettings.InventoryEffect); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Reconditioning Effect: "); double.TryParse(_reEffTmp = GUILayout.TextField(_reEffTmp, 10, GUILayout.Width(80)), out _workingPreset.TimeSettings.ReconditioningEffect); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Max Reconditioning: "); double.TryParse(_maxReTmp = GUILayout.TextField(_maxReTmp, 10, GUILayout.Width(80)), out _workingPreset.TimeSettings.MaxReconditioning); GUILayout.EndHorizontal(); GUILayout.Label("Rollout-Reconditioning Split:"); GUILayout.BeginHorizontal(); //GUILayout.Label("Rollout", GUILayout.ExpandWidth(false)); _workingPreset.TimeSettings.RolloutReconSplit = GUILayout.HorizontalSlider((float)Math.Floor(_workingPreset.TimeSettings.RolloutReconSplit * 100f), 0, 100) / 100.0; //GUILayout.Label("Recon.", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.Label((Math.Floor(_workingPreset.TimeSettings.RolloutReconSplit * 100)) + "% Rollout, " + (100 - Math.Floor(_workingPreset.TimeSettings.RolloutReconSplit * 100)) + "% Reconditioning"); GUILayout.EndVertical(); //end time settings GUILayout.EndVertical(); GUILayout.EndHorizontal(); //end feature/time setting split //begin formula settings GUILayout.BeginVertical(); GUILayout.Label("Formula Settings (Advanced)", _yellowText); GUILayout.BeginVertical(HighLogic.Skin.textArea); GUILayout.BeginHorizontal(); if (GUILayout.Button("Show/Hide Formulas")) { _showFormula = !_showFormula; } GUILayout.EndHorizontal(); if (_showFormula) { //show half here, half on other side? Or all in one big list int textWidth = 350; GUILayout.BeginHorizontal(); GUILayout.Label("NodeFormula: "); _workingPreset.FormulaSettings.NodeFormula = GUILayout.TextField(_workingPreset.FormulaSettings.NodeFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("UpgradeFunds: "); _workingPreset.FormulaSettings.UpgradeFundsFormula = GUILayout.TextField(_workingPreset.FormulaSettings.UpgradeFundsFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("UpgradesForScience: "); _workingPreset.FormulaSettings.UpgradesForScience = GUILayout.TextField(_workingPreset.FormulaSettings.UpgradesForScience, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("ResearchFormula: "); _workingPreset.FormulaSettings.ResearchFormula = GUILayout.TextField(_workingPreset.FormulaSettings.ResearchFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("EffectivePart: "); _workingPreset.FormulaSettings.EffectivePartFormula = GUILayout.TextField(_workingPreset.FormulaSettings.EffectivePartFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("ProceduralPart: "); _workingPreset.FormulaSettings.ProceduralPartFormula = GUILayout.TextField(_workingPreset.FormulaSettings.ProceduralPartFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("BPFormula: "); _workingPreset.FormulaSettings.BPFormula = GUILayout.TextField(_workingPreset.FormulaSettings.BPFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("KSCUpgrade: "); _workingPreset.FormulaSettings.KSCUpgradeFormula = GUILayout.TextField(_workingPreset.FormulaSettings.KSCUpgradeFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Reconditioning: "); _workingPreset.FormulaSettings.ReconditioningFormula = GUILayout.TextField(_workingPreset.FormulaSettings.ReconditioningFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("BuildRate: "); _workingPreset.FormulaSettings.BuildRateFormula = GUILayout.TextField(_workingPreset.FormulaSettings.BuildRateFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("UpgradeReset: "); _workingPreset.FormulaSettings.UpgradeResetFormula = GUILayout.TextField(_workingPreset.FormulaSettings.UpgradeResetFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("InventorySale: "); _workingPreset.FormulaSettings.InventorySaleFormula = GUILayout.TextField(_workingPreset.FormulaSettings.InventorySaleFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("RolloutCosts: "); _workingPreset.FormulaSettings.RolloutCostFormula = GUILayout.TextField(_workingPreset.FormulaSettings.RolloutCostFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("IntegrationCosts: "); _workingPreset.FormulaSettings.IntegrationCostFormula = GUILayout.TextField(_workingPreset.FormulaSettings.IntegrationCostFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("IntegrationTime: "); _workingPreset.FormulaSettings.IntegrationTimeFormula = GUILayout.TextField(_workingPreset.FormulaSettings.IntegrationTimeFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("NewLaunchPadCost: "); _workingPreset.FormulaSettings.NewLaunchPadCostFormula = GUILayout.TextField(_workingPreset.FormulaSettings.NewLaunchPadCostFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("RushCost: "); _workingPreset.FormulaSettings.RushCostFormula = GUILayout.TextField(_workingPreset.FormulaSettings.RushCostFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("AirlaunchCost: "); _workingPreset.FormulaSettings.AirlaunchCostFormula = GUILayout.TextField(_workingPreset.FormulaSettings.AirlaunchCostFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("AirlaunchTime: "); _workingPreset.FormulaSettings.AirlaunchTimeFormula = GUILayout.TextField(_workingPreset.FormulaSettings.AirlaunchTimeFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("EngineRefurbCredit: "); _workingPreset.FormulaSettings.EngineRefurbFormula = GUILayout.TextField(_workingPreset.FormulaSettings.EngineRefurbFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); } GUILayout.EndVertical(); GUILayout.EndVertical(); //end formula settings GUILayout.EndScrollView(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Save", GUILayout.ExpandWidth(false))) { PresetManager.Instance.ActivePreset = _workingPreset; PresetManager.Instance.SaveActiveToSaveData(); _workingPreset = null; if (!PresetManager.Instance.ActivePreset.GeneralSettings.Enabled) { Utilities.DisableModFunctionality(); } KCTGameStates.Settings.MaxTimeWarp = _newTimewarp; KCTGameStates.Settings.DisableAllMessages = _disableAllMsgs; KCTGameStates.Settings.ShowSimWatermark = _showSimWatermark; KCTGameStates.Settings.OverrideLaunchButton = _overrideLaunchBtn; KCTGameStates.Settings.Debug = _debug; KCTGameStates.Settings.AutoKACAlarms = _autoAlarms; KCTGameStates.Settings.CleanUpKSCDebris = _cleanUpKSCDebris; KCTGameStates.Settings.Save(); GUIStates.ShowSettings = false; if (!IsPrimarilyDisabled && !GUIStates.ShowFirstRun) { ResetBLWindow(); GUIStates.ShowBuildList = true; RefreshToolbarState(); } if (!PresetManager.Instance.ActivePreset.GeneralSettings.Enabled) { InputLockManager.RemoveControlLock(KerbalConstructionTime.KCTKSCLock); } for (int j = 0; j < KCTGameStates.TechList.Count; j++) { KCTGameStates.TechList[j].UpdateBuildRate(j); } foreach (KSCItem ksc in KCTGameStates.KSCs) { ksc.RecalculateBuildRates(); ksc.RecalculateUpgradedBuildRates(); } ResetFormulaRateHolders(); KSCContextMenuOverrider.AreTextsUpdated = false; } if (GUILayout.Button("Cancel", GUILayout.ExpandWidth(false))) { _workingPreset = null; GUIStates.ShowSettings = false; if (!IsPrimarilyDisabled && !GUIStates.ShowFirstRun) { ResetBLWindow(); GUIStates.ShowBuildList = true; RefreshToolbarState(); } for (int j = 0; j < KCTGameStates.TechList.Count; j++) { KCTGameStates.TechList[j].UpdateBuildRate(j); } } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.EndVertical(); //end column 2 GUILayout.BeginVertical(GUILayout.Width(100)); //Start general settings GUILayout.Label("General Settings", _yellowText); GUILayout.Label("NOTE: Affects all saves!", _yellowText); GUILayout.BeginVertical(HighLogic.Skin.textArea); GUILayout.Label("Max Timewarp"); GUILayout.BeginHorizontal(); if (GUILayout.Button("-", GUILayout.ExpandWidth(false))) { _newTimewarp = Math.Max(_newTimewarp - 1, 0); } //current warp setting GUILayout.Label(TimeWarp.fetch.warpRates[_newTimewarp] + "x"); if (GUILayout.Button("+", GUILayout.ExpandWidth(false))) { _newTimewarp = Math.Min(_newTimewarp + 1, TimeWarp.fetch.warpRates.Length - 1); } GUILayout.EndHorizontal(); _autoAlarms = GUILayout.Toggle(_autoAlarms, "Auto KAC Alarms", HighLogic.Skin.button); _overrideLaunchBtn = GUILayout.Toggle(_overrideLaunchBtn, "Override Launch Button", HighLogic.Skin.button); //useBlizzyToolbar = GUILayout.Toggle(useBlizzyToolbar, "Use Toolbar Mod", HighLogic.Skin.button); _disableAllMsgs = !GUILayout.Toggle(!_disableAllMsgs, "Use Message System", HighLogic.Skin.button); _showSimWatermark = GUILayout.Toggle(_showSimWatermark, "Show sim watermark", HighLogic.Skin.button); _debug = GUILayout.Toggle(_debug, "Debug Logging", HighLogic.Skin.button); _cleanUpKSCDebris = GUILayout.Toggle(_cleanUpKSCDebris, "Autoclean KSC Debris", HighLogic.Skin.button); GUILayout.EndVertical(); GUILayout.EndVertical(); GUILayout.EndHorizontal(); //end main split GUILayout.EndVertical(); //end window _isChanged = GUI.changed; if (!Input.GetMouseButtonDown(1) && !Input.GetMouseButtonDown(2)) { GUI.DragWindow(); } }
public void SetActiveFromSaveData() { string SavedFile = KSPUtil.ApplicationRootPath + "/saves/" + HighLogic.SaveFolder+"/KCT_Settings.cfg"; if (System.IO.File.Exists(SavedFile)) { KCT_Preset saved = new KCT_Preset(SavedFile); KCT_Preset source = FindPresetByShortName(saved.shortName); if (source != null) //Get settings from the original preset, if it exists { ActivePreset = source; KCTDebug.Log("Loading settings from preset, rather than save. Name: " + ActivePreset.name); } else { ActivePreset = saved; KCTDebug.Log("Loading saved settings."); } } else { KCT_Preset defaultSettings = FindPresetByShortName("default"); if (defaultSettings != null) ActivePreset = defaultSettings; else ActivePreset = new KCT_Preset("UNINIT", "UNINIT", "NA", "NA"); } }
public void LoadPresets() { Presets.Clear(); // foreach (string file in System.IO.Directory.GetFiles(PresetPath, "*.cfg")) foreach (string file in PresetPaths) { try { KCT_Preset newPreset = new KCT_Preset(file); if (KCT_Utilities.CurrentGameIsCareer() && !newPreset.CareerEnabled) continue; //Don't display presets that aren't designed for this game mode if (HighLogic.CurrentGame.Mode == Game.Modes.SCIENCE_SANDBOX && !newPreset.ScienceEnabled) continue; if (KCT_Utilities.CurrentGameIsSandbox() && !newPreset.SandboxEnabled) continue; //KCT_Preset existing = Presets.Find(p => p.name == newPreset.name); KCT_Preset existing = FindPresetByShortName(newPreset.shortName); if (existing != null) //Ensure there is only one preset with a given name. Take the last one found as the final one. { Presets.Remove(existing); } Presets.Add(newPreset); } catch { Debug.LogError("[KCT] Could not load preset at " + file); } } }
public int GetIndex(KCT_Preset preset, bool softMatch=false) { foreach (KCT_Preset preset2 in Presets) { //if (PresetsEqual(preset, preset2, softMatch)) if (KCT_Utilities.ConfigNodesAreEquivalent(preset.AsConfigNode(), preset2.AsConfigNode())) return Presets.IndexOf(preset2); } return -1; /* if (Presets.Contains(preset)) return Presets.IndexOf(preset); else return -1;*/ }
public void ClearPresets() { Presets.Clear(); PresetPaths.Clear(); ActivePreset = null; }
public static void SetNewWorkingPreset(KCT_Preset preset, bool setCustom) { if (preset != null) WorkingPreset = preset; if (setCustom) { presetIndex = KCT_PresetManager.Instance.PresetShortNames(true).Length - 1; //Custom preset WorkingPreset.name = "Custom"; WorkingPreset.shortName = "Custom"; WorkingPreset.description = "A custom set of configs."; WorkingPreset.author = HighLogic.SaveFolder; } OMultTmp = WorkingPreset.timeSettings.OverallMultiplier.ToString(); BEffTmp = WorkingPreset.timeSettings.BuildEffect.ToString(); IEffTmp = WorkingPreset.timeSettings.InventoryEffect.ToString(); ReEffTmp = WorkingPreset.timeSettings.ReconditioningEffect.ToString(); MaxReTmp = WorkingPreset.timeSettings.MaxReconditioning.ToString(); }
public static void SaveAsNewPreset(KCT_Preset newPreset) { toSave = newPreset; saveCareer = newPreset.CareerEnabled; saveScience = newPreset.ScienceEnabled; saveSandbox = newPreset.SandboxEnabled; saveName = newPreset.name; saveShort = newPreset.shortName; saveDesc = newPreset.description; saveAuthor = newPreset.author; showPresetSaver = true; }
public static void DrawPresetWindow(int windowID) { GUIStyle yellowText = new GUIStyle(GUI.skin.label); yellowText.normal.textColor = Color.yellow; if (WorkingPreset == null) { SetNewWorkingPreset(new KCT_Preset(KCT_PresetManager.Instance.ActivePreset), false); //might need to copy instead of assign here presetIndex = KCT_PresetManager.Instance.GetIndex(WorkingPreset); } GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); //preset selector GUILayout.BeginVertical(); GUILayout.Label("Presets", yellowText, GUILayout.ExpandHeight(false)); //preset toolbar in a scrollview presetScrollView = GUILayout.BeginScrollView(presetScrollView, GUILayout.Width(presetPosition.width/6.0f)); //TODO: update HighLogic.Skin.textArea string[] presetShortNames = KCT_PresetManager.Instance.PresetShortNames(true); if (presetIndex == -1) { SetNewWorkingPreset(null, true); /*presetIndex = presetShortNames.Length - 1; WorkingPreset.name = "Custom"; WorkingPreset.shortName = "Custom"; WorkingPreset.description = "A custom set of configs."; WorkingPreset.author = HighLogic.SaveFolder;*/ } if (changed && presetIndex < presetShortNames.Length - 1 && !KCT_Utilities.ConfigNodesAreEquivalent(WorkingPreset.AsConfigNode(), KCT_PresetManager.Instance.Presets[presetIndex].AsConfigNode())) //!KCT_PresetManager.Instance.PresetsEqual(WorkingPreset, KCT_PresetManager.Instance.Presets[presetIndex], true) { SetNewWorkingPreset(null, true); /*presetIndex = presetShortNames.Length - 1; //Custom preset WorkingPreset.name = "Custom"; WorkingPreset.shortName = "Custom"; WorkingPreset.description = "A custom set of configs."; WorkingPreset.author = HighLogic.SaveFolder;*/ } /* presetIndex = KCT_PresetManager.Instance.GetIndex(WorkingPreset); //Check that the current preset is equal to the expected one if (presetIndex == -1) presetIndex = presetNames.Length - 1;*/ int prev = presetIndex; presetIndex = GUILayout.SelectionGrid(presetIndex, presetShortNames, 1); if (prev != presetIndex) //If a new preset was selected { if (presetIndex != presetShortNames.Length - 1) { SetNewWorkingPreset(new KCT_Preset(KCT_PresetManager.Instance.Presets[presetIndex]), false); } else { SetNewWorkingPreset(null, true); /*WorkingPreset.name = "Custom"; WorkingPreset.shortName = "Custom"; WorkingPreset.description = "A custom set of configs."; WorkingPreset.author = HighLogic.SaveFolder;*/ } } //presetIndex = GUILayout.Toolbar(presetIndex, presetNames); GUILayout.EndScrollView(); if (GUILayout.Button("Save as\nNew Preset", GUILayout.ExpandHeight(false))) { //create new preset SaveAsNewPreset(WorkingPreset); } if (WorkingPreset.AllowDeletion && presetIndex != presetShortNames.Length - 1 && GUILayout.Button("Delete Preset")) //allowed to be deleted and isn't Custom { DialogGUIBase[] options = new DialogGUIBase[2]; options[0] = new DialogGUIButton("Delete File", DeleteActivePreset); options[1] = new DialogGUIButton("Cancel", DummyVoid); MultiOptionDialog dialog = new MultiOptionDialog("Are you sure you want to delete the selected Preset, file and all? This cannot be undone!", "Confirm Deletion", null, options); PopupDialog.SpawnPopupDialog(new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), dialog, false, HighLogic.UISkin); } GUILayout.EndVertical(); //Main sections GUILayout.BeginVertical(); presetMainScroll = GUILayout.BeginScrollView(presetMainScroll); //Preset info section) GUILayout.BeginVertical(HighLogic.Skin.textArea); GUILayout.Label("Preset Name: " + WorkingPreset.name); GUILayout.Label("Description: " + WorkingPreset.description); GUILayout.Label("Author(s): " + WorkingPreset.author); GUILayout.EndVertical(); GUILayout.BeginHorizontal(); //Features section GUILayout.BeginVertical(); GUILayout.Label("Features", yellowText); GUILayout.BeginVertical(HighLogic.Skin.textArea); WorkingPreset.generalSettings.Enabled= GUILayout.Toggle(WorkingPreset.generalSettings.Enabled, "Mod Enabled", HighLogic.Skin.button); WorkingPreset.generalSettings.BuildTimes = GUILayout.Toggle(WorkingPreset.generalSettings.BuildTimes, "Build Times", HighLogic.Skin.button); WorkingPreset.generalSettings.ReconditioningTimes = GUILayout.Toggle(WorkingPreset.generalSettings.ReconditioningTimes, "Launchpad Reconditioning", HighLogic.Skin.button); WorkingPreset.generalSettings.TechUnlockTimes = GUILayout.Toggle(WorkingPreset.generalSettings.TechUnlockTimes, "Tech Unlock Times", HighLogic.Skin.button); WorkingPreset.generalSettings.KSCUpgradeTimes = GUILayout.Toggle(WorkingPreset.generalSettings.KSCUpgradeTimes, "KSC Upgrade Times", HighLogic.Skin.button); WorkingPreset.generalSettings.Simulations = GUILayout.Toggle(WorkingPreset.generalSettings.Simulations, "Allow Simulations", HighLogic.Skin.button); WorkingPreset.generalSettings.SimulationCosts = GUILayout.Toggle(WorkingPreset.generalSettings.SimulationCosts, "Simulation Costs", HighLogic.Skin.button); WorkingPreset.generalSettings.RequireVisitsForSimulations = GUILayout.Toggle(WorkingPreset.generalSettings.RequireVisitsForSimulations, "Must Visit Planets", HighLogic.Skin.button); WorkingPreset.generalSettings.TechUpgrades = GUILayout.Toggle(WorkingPreset.generalSettings.TechUpgrades, "Upgrades From Tech Tree", HighLogic.Skin.button); WorkingPreset.generalSettings.SharedUpgradePool = GUILayout.Toggle(WorkingPreset.generalSettings.SharedUpgradePool, "Shared Upgrade Pool (KSCSwitcher)", HighLogic.Skin.button); GUILayout.BeginHorizontal(); GUILayout.Label("Starting Upgrades:"); WorkingPreset.generalSettings.StartingPoints = GUILayout.TextField(WorkingPreset.generalSettings.StartingPoints, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.EndVertical(); //end Features GUILayout.BeginVertical(); //Begin time settings GUILayout.Label("Time Settings", yellowText); GUILayout.BeginVertical(HighLogic.Skin.textArea); GUILayout.BeginHorizontal(); GUILayout.Label("Overall Multiplier: "); double.TryParse(OMultTmp = GUILayout.TextField(OMultTmp, 10, GUILayout.Width(80)), out WorkingPreset.timeSettings.OverallMultiplier); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Build Effect: "); double.TryParse(BEffTmp = GUILayout.TextField(BEffTmp, 10, GUILayout.Width(80)), out WorkingPreset.timeSettings.BuildEffect); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Inventory Effect: "); double.TryParse(IEffTmp = GUILayout.TextField(IEffTmp, 10, GUILayout.Width(80)), out WorkingPreset.timeSettings.InventoryEffect); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Reconditioning Effect: "); double.TryParse(ReEffTmp = GUILayout.TextField(ReEffTmp, 10, GUILayout.Width(80)), out WorkingPreset.timeSettings.ReconditioningEffect); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Max Reconditioning: "); double.TryParse(MaxReTmp = GUILayout.TextField(MaxReTmp, 10, GUILayout.Width(80)), out WorkingPreset.timeSettings.MaxReconditioning); GUILayout.EndHorizontal(); GUILayout.Label("Rollout-Reconditioning Split:"); GUILayout.BeginHorizontal(); //GUILayout.Label("Rollout", GUILayout.ExpandWidth(false)); WorkingPreset.timeSettings.RolloutReconSplit = GUILayout.HorizontalSlider((float)Math.Floor(WorkingPreset.timeSettings.RolloutReconSplit * 100f), 0, 100)/100.0; //GUILayout.Label("Recon.", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.Label((Math.Floor(WorkingPreset.timeSettings.RolloutReconSplit*100))+"% Rollout, "+(100-Math.Floor(WorkingPreset.timeSettings.RolloutReconSplit*100))+"% Reconditioning"); GUILayout.EndVertical(); //end time settings GUILayout.EndVertical(); GUILayout.EndHorizontal(); //end feature/time setting split //begin formula settings GUILayout.BeginVertical(); GUILayout.Label("Formula Settings (Advanced)", yellowText); GUILayout.BeginVertical(HighLogic.Skin.textArea); GUILayout.BeginHorizontal(); if (GUILayout.Button("Show/Hide Formulas")) { showFormula = !showFormula; } if (GUILayout.Button("View Wiki in Browser")) { Application.OpenURL("https://github.com/magico13/KCT/wiki"); } GUILayout.EndHorizontal(); if (showFormula) { //show half here, half on other side? Or all in one big list int textWidth = 350; GUILayout.BeginHorizontal(); GUILayout.Label("NodeFormula: "); WorkingPreset.formulaSettings.NodeFormula = GUILayout.TextField(WorkingPreset.formulaSettings.NodeFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("UpgradeFunds: "); WorkingPreset.formulaSettings.UpgradeFundsFormula = GUILayout.TextField(WorkingPreset.formulaSettings.UpgradeFundsFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("UpgradeScience: "); WorkingPreset.formulaSettings.UpgradeScienceFormula = GUILayout.TextField(WorkingPreset.formulaSettings.UpgradeScienceFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("ResearchFormula: "); WorkingPreset.formulaSettings.ResearchFormula = GUILayout.TextField(WorkingPreset.formulaSettings.ResearchFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("EffectivePart: "); WorkingPreset.formulaSettings.EffectivePartFormula = GUILayout.TextField(WorkingPreset.formulaSettings.EffectivePartFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("ProceduralPart: "); WorkingPreset.formulaSettings.ProceduralPartFormula = GUILayout.TextField(WorkingPreset.formulaSettings.ProceduralPartFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("BPFormula: "); WorkingPreset.formulaSettings.BPFormula = GUILayout.TextField(WorkingPreset.formulaSettings.BPFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("KSCUpgrade: "); WorkingPreset.formulaSettings.KSCUpgradeFormula = GUILayout.TextField(WorkingPreset.formulaSettings.KSCUpgradeFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Reconditioning: "); WorkingPreset.formulaSettings.ReconditioningFormula = GUILayout.TextField(WorkingPreset.formulaSettings.ReconditioningFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("BuildRate: "); WorkingPreset.formulaSettings.BuildRateFormula = GUILayout.TextField(WorkingPreset.formulaSettings.BuildRateFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("SimCost: "); WorkingPreset.formulaSettings.SimCostFormula = GUILayout.TextField(WorkingPreset.formulaSettings.SimCostFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("KerbinSimCost: "); WorkingPreset.formulaSettings.KerbinSimCostFormula = GUILayout.TextField(WorkingPreset.formulaSettings.KerbinSimCostFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("UpgradeReset: "); WorkingPreset.formulaSettings.UpgradeResetFormula = GUILayout.TextField(WorkingPreset.formulaSettings.UpgradeResetFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("InventorySale: "); WorkingPreset.formulaSettings.InventorySaleFormula = GUILayout.TextField(WorkingPreset.formulaSettings.InventorySaleFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("RolloutCosts: "); WorkingPreset.formulaSettings.RolloutCostFormula = GUILayout.TextField(WorkingPreset.formulaSettings.RolloutCostFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("NewLaunchPadCost: "); WorkingPreset.formulaSettings.NewLaunchPadCostFormula = GUILayout.TextField(WorkingPreset.formulaSettings.NewLaunchPadCostFormula, GUILayout.Width(textWidth)); GUILayout.EndHorizontal(); } GUILayout.EndVertical(); GUILayout.EndVertical(); //end formula settings GUILayout.EndScrollView(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Save", GUILayout.ExpandWidth(false))) { KCT_PresetManager.Instance.ActivePreset = WorkingPreset; KCT_PresetManager.Instance.SaveActiveToSaveData(); WorkingPreset = null; showSettings = false; if (!KCT_PresetManager.Instance.ActivePreset.generalSettings.Enabled) KCT_Utilities.DisableModFunctionality(); //KCT_GameStates.settings.enabledForSave = KCT_PresetManager.Instance.ActivePreset.generalSettings.Enabled; KCT_GameStates.settings.MaxTimeWarp = newTimewarp; KCT_GameStates.settings.ForceStopWarp = forceStopWarp; KCT_GameStates.settings.DisableAllMessages = disableAllMsgs; KCT_GameStates.settings.OverrideLaunchButton = overrideLaunchBtn; KCT_GameStates.settings.Debug = debug; KCT_GameStates.settings.AutoKACAlarms = autoAlarms; KCT_GameStates.settings.PreferBlizzyToolbar = useBlizzyToolbar; KCT_GameStates.settings.CheckForDebugUpdates = debugUpdateChecking; KCT_GameStates.settings.Save(); showSettings = false; if (!PrimarilyDisabled && !showFirstRun) { ResetBLWindow(); if (KCT_Events.instance.KCTButtonStock != null) KCT_Events.instance.KCTButtonStock.SetTrue(); else { showBuildList = true; } } if (!KCT_PresetManager.Instance.ActivePreset.generalSettings.Enabled) InputLockManager.RemoveControlLock("KCTKSCLock"); for (int j = 0; j < KCT_GameStates.TechList.Count; j++) KCT_GameStates.TechList[j].UpdateBuildRate(j); KCT_GUI.ResetFormulaRateHolders(); } if (GUILayout.Button("Cancel", GUILayout.ExpandWidth(false))) { WorkingPreset = null; showSettings = false; if (!PrimarilyDisabled && !showFirstRun) { ResetBLWindow(); if (KCT_Events.instance.KCTButtonStock != null) KCT_Events.instance.KCTButtonStock.SetTrue(); else showBuildList = true; } for (int j = 0; j < KCT_GameStates.TechList.Count; j++) KCT_GameStates.TechList[j].UpdateBuildRate(j); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.EndVertical(); //end column 2 GUILayout.BeginVertical(GUILayout.Width(100)); //Start general settings GUILayout.Label("General Settings", yellowText); GUILayout.Label("NOTE: Affects all saves!", yellowText); GUILayout.BeginVertical(HighLogic.Skin.textArea); GUILayout.Label("Max Timewarp"); GUILayout.BeginHorizontal(); if (GUILayout.Button("-", GUILayout.ExpandWidth(false))) { newTimewarp = Math.Max(newTimewarp - 1, 0); } //current warp setting GUILayout.Label(TimeWarp.fetch.warpRates[newTimewarp] + "x"); if (GUILayout.Button("+", GUILayout.ExpandWidth(false))) { newTimewarp = Math.Min(newTimewarp + 1, TimeWarp.fetch.warpRates.Length - 1); } GUILayout.EndHorizontal(); forceStopWarp = GUILayout.Toggle(forceStopWarp, "Auto Stop TimeWarp", HighLogic.Skin.button); autoAlarms = GUILayout.Toggle(autoAlarms, "Auto KAC Alarms", HighLogic.Skin.button); overrideLaunchBtn = GUILayout.Toggle(overrideLaunchBtn, "Override Launch Button", HighLogic.Skin.button); useBlizzyToolbar = GUILayout.Toggle(useBlizzyToolbar, "Use Toolbar Mod", HighLogic.Skin.button); disableAllMsgs = !GUILayout.Toggle(!disableAllMsgs, "Use Message System", HighLogic.Skin.button); debug = GUILayout.Toggle(debug, "Debug Logging", HighLogic.Skin.button); #if DEBUG debugUpdateChecking = GUILayout.Toggle(debugUpdateChecking, "Check for Dev Updates", HighLogic.Skin.button); #endif GUILayout.EndVertical(); GUILayout.EndVertical(); GUILayout.EndHorizontal(); //end main split GUILayout.EndVertical(); //end window changed = GUI.changed; if (!Input.GetMouseButtonDown(1) && !Input.GetMouseButtonDown(2)) GUI.DragWindow(); }