Exemple #1
0
        internal static void DoQuicksave(string template, string message)
        {
            if (HighLogic.LoadedScene == GameScenes.SPACECENTER ||
                HighLogic.LoadedScene == GameScenes.EDITOR ||
                HighLogic.LoadedScene == GameScenes.FLIGHT ||
                HighLogic.LoadedScene == GameScenes.TRACKSTATION)
            {
                string newName = StringTranslation.AddFormatInfo(template, "", dateFormat);
                if (newName != null && newName.Length > 0)
                {
                    // First we need to acquire the current game status
                    Game currentGame = HighLogic.CurrentGame.Updated();

                    // If we are not at the space center, we have to reset the startScene to flight,
                    // because calling Updated() sets it to space center.
                    if (HighLogic.LoadedScene == GameScenes.FLIGHT)
                    {
                        currentGame.startScene = GameScenes.FLIGHT;
                    }

                    string filename = GamePersistence.SaveGame(currentGame, newName, HighLogic.SaveFolder, SaveMode.OVERWRITE);

                    lastBackup = Time.realtimeSinceStartup;

                    ScreenMessages.PostScreenMessage(message + ": " + newName);
                }

                QuicksaveCleanup.Cleanup();
            }
        }
Exemple #2
0
        private void DisplayConfigure()
        {
            if (!stylesInitted)
            {
                InitStyles();
            }

            GUILayout.BeginVertical();
#if DEBUG
            GUILayout.BeginHorizontal();
            GUILayout.Label("Log:");
            LogLevelButton(KSP_Log.Log.LEVEL.OFF, "OFF");
            LogLevelButton(KSP_Log.Log.LEVEL.ERROR, "ERROR");
            LogLevelButton(KSP_Log.Log.LEVEL.WARNING, "WARNING");
            LogLevelButton(KSP_Log.Log.LEVEL.INFO, "INFO");
            LogLevelButton(KSP_Log.Log.LEVEL.DETAIL, "DETAIL");
            LogLevelButton(KSP_Log.Log.LEVEL.TRACE, "TRACE");
            GUILayout.EndHorizontal();
#endif

            GUILayout.Space(20);
            GUILayout.BeginHorizontal();

            GUI.enabled = showPanel != ConfigPanel.Quicksave;
            if (GUILayout.Button("Options"))
            {
                showPanel           = ConfigPanel.Quicksave;
                windowBounds.height = 0;
            }

            GUI.enabled = showPanel != ConfigPanel.QuickSaveIntervals;
            if (GUILayout.Button("Intervals"))
            {
                showPanel           = ConfigPanel.QuickSaveIntervals;
                windowBounds.height = 0;
            }

            GUI.enabled = showPanel != ConfigPanel.QuickSaveAging;
            if (GUILayout.Button("Age Settings"))
            {
                showPanel           = ConfigPanel.QuickSaveAging;
                windowBounds.height = 0;
            }

            GUI.enabled = showPanel != ConfigPanel.Editor;
            if (GUILayout.Button("Editor Options"))
            {
                showPanel           = ConfigPanel.Editor;
                windowBounds.height = 0;
            }
            GUI.enabled = showPanel != ConfigPanel.Sound;
            if (GUILayout.Button("Sound Options"))
            {
                showPanel           = ConfigPanel.Sound;
                windowBounds.height = 0;
            }

            GUILayout.EndHorizontal();
            GUI.enabled = true;
            switch (showPanel)
            {
            case ConfigPanel.Quicksave:
            {
                GUILayout.Space(15);

                // QuickSave options
                // quicksave on launch
                QuickSaveOnLaunchToggle("Quicksave on launch");
                QuickSaveOnSceneChange("Quicksave on scene change");

                GUILayout.BeginHorizontal();
                GUILayout.Label("Minimum time between quicksaves (for scene changes only, in seconds): ");
                String sMinTimeBetweenQuicksaves = GUILayout.TextField(Configuration.MinTimeBetweenQuicksaves.ToString(), STYLE_CONFIG_TEXTFIELD);
                GUILayout.Space(CONFIG_TEXTFIELD_RIGHT_MARGIN);
                Configuration.MinTimeBetweenQuicksaves = ParseInt(sMinTimeBetweenQuicksaves);
                GUILayout.EndHorizontal();


                GUILayout.BeginHorizontal();
                GUILayout.Label("Templates:");
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Template Info"))
                {
                    showTemplateInfo = !showTemplateInfo;
                }
                GUILayout.EndHorizontal();
                GUILayout.BeginHorizontal();
                GUILayout.Label("(Click the Launch/Quicksave/Scenesave template button to select, or enter your own template)");
                GUILayout.EndHorizontal();

                GUI.enabled = (TemplateSelectionGui.templateGui == null);
                var buttonRect = GUILayoutUtility.GetRect(new GUIContent("Launch Template"), GUI.skin.button, GUILayout.Width(TEMPLATE_WIN_BUTTON_WIDTH));

                if (GUILayout.Button("Launch Template", GUILayout.Width(TEMPLATE_WIN_BUTTON_WIDTH)))
                {
                    TemplateSelectionGui.StartWindow("Launch", Configuration.LaunchNameTemplate, windowBounds, buttonRect);
                    TemplateSelectionGui.templateGui = gameObject.AddComponent <TemplateSelectionGui>();
                }
                GUI.enabled = true;
                //GUILayout.Label("Launch template: ", STYLE_CONFIG_BACKUP_PATH_LABEL);
                Configuration.LaunchNameTemplate = GUILayout.TextField(Configuration.LaunchNameTemplate);
                GUILayout.BeginHorizontal();
                string newName = StringTranslation.AddFormatInfo(Configuration.LaunchNameTemplate, "", "");
                GUILayout.Label(" ==> ");
                GUILayout.TextField(Quicksave.LAUNCH_QS_PREFIX + newName);
                GUILayout.EndHorizontal();

                GUI.enabled = (TemplateSelectionGui.templateGui == null);
                buttonRect  = GUILayoutUtility.GetRect(new GUIContent("Quicksave Template"), GUI.skin.button, GUILayout.Width(TEMPLATE_WIN_BUTTON_WIDTH));
                if (GUILayout.Button("Quicksave Template", GUILayout.Width(TEMPLATE_WIN_BUTTON_WIDTH)))
                {
                    TemplateSelectionGui.StartWindow("Quicksave", Configuration.QuickSaveNameTemplate, windowBounds, buttonRect);
                    TemplateSelectionGui.templateGui = gameObject.AddComponent <TemplateSelectionGui>();
                }
                GUI.enabled = true;
                //GUILayout.Label("Quicksave template: ", STYLE_CONFIG_BACKUP_PATH_LABEL);
                Configuration.QuickSaveNameTemplate = GUILayout.TextField(Configuration.QuickSaveNameTemplate);
                GUILayout.BeginHorizontal();
                newName = StringTranslation.AddFormatInfo(Configuration.QuickSaveNameTemplate, "", "");
                GUILayout.Label(" ==> ");
                GUILayout.TextField(Quicksave.AUTO_QS_PREFIX + newName);
                GUILayout.EndHorizontal();

                GUI.enabled = (TemplateSelectionGui.templateGui == null);
                buttonRect  = GUILayoutUtility.GetRect(new GUIContent("Scenesave Template"), GUI.skin.button, GUILayout.Width(TEMPLATE_WIN_BUTTON_WIDTH));
                if (GUILayout.Button("Scenesave Template", GUILayout.Width(TEMPLATE_WIN_BUTTON_WIDTH)))
                {
                    TemplateSelectionGui.StartWindow("Scenesave", Configuration.SceneSaveNameTemplate, windowBounds, buttonRect);
                    TemplateSelectionGui.templateGui = gameObject.AddComponent <TemplateSelectionGui>();
                }
                GUI.enabled = true;
                //GUILayout.Label("Scenesave template: ", STYLE_CONFIG_BACKUP_PATH_LABEL);
                Configuration.SceneSaveNameTemplate = GUILayout.TextField(Configuration.SceneSaveNameTemplate);
                GUILayout.BeginHorizontal();
                newName = StringTranslation.AddFormatInfo(Configuration.SceneSaveNameTemplate, "", "");
                GUILayout.Label(" ==> ");
                GUILayout.TextField(Quicksave.SCENE_QS_PREFIX + newName);
                GUILayout.EndHorizontal();
                GUILayout.Space(20);
                GUILayout.EndVertical();
            }
            break;

            case ConfigPanel.QuickSaveIntervals:
            {
                GUILayout.Label("Quicksave interval: ");

                QuicksaveIntervalToggle(Configuration.QuickSave_Interval.ONCE_IN_10_MINUTES, "Once in 10 minutes");
                QuicksaveIntervalToggle(Configuration.QuickSave_Interval.ONCE_IN_30_MINUTES, "Once in 30 minutes");
                QuicksaveIntervalToggle(Configuration.QuickSave_Interval.ONCE_PER_HOUR, "Once per hour");
                QuicksaveIntervalToggle(Configuration.QuickSave_Interval.ONCE_IN_2_HOURS, "Once in 2 hours");
                QuicksaveIntervalToggle(Configuration.QuickSave_Interval.ONCE_IN_4_HOURS, "Once in 4 hours");

                GUILayout.BeginHorizontal();
                QuicksaveIntervalToggle(Configuration.QuickSave_Interval.CUSTOM, "Custom (minutes)");
                GUILayout.FlexibleSpace();

                GUI.enabled = (Configuration.QuicksaveInterval == Configuration.QuickSave_Interval.CUSTOM);
                String sCustomInterval = GUILayout.TextField(Configuration.CustomQuicksaveInterval.ToString(), STYLE_CONFIG_TEXTFIELD);
                GUILayout.Space(CONFIG_TEXTFIELD_RIGHT_MARGIN);
                Configuration.CustomQuicksaveInterval = ParseInt(sCustomInterval);
                GUI.enabled = true;
                GUILayout.EndHorizontal();

                GUILayout.EndVertical();
                GUILayout.Space(20);
            }
            break;

            case ConfigPanel.QuickSaveAging:
            {
                GUILayout.Space(15);
                GUILayout.BeginHorizontal();
                GUILayout.Label("Days to keep quicksaves: ");
                String sDaysToKeepQuicksaves = GUILayout.TextField(Configuration.DaysToKeepQuicksaves.ToString(), STYLE_CONFIG_TEXTFIELD);
                GUILayout.Space(CONFIG_TEXTFIELD_RIGHT_MARGIN);
                Configuration.DaysToKeepQuicksaves = ParseInt(sDaysToKeepQuicksaves);
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Min number of quicksaves: ");
                String sMinNumberOfQuicksaves = GUILayout.TextField(Configuration.MinNumberOfQuicksaves.ToString(), STYLE_CONFIG_TEXTFIELD);
                GUILayout.Space(CONFIG_TEXTFIELD_RIGHT_MARGIN);
                Configuration.MinNumberOfQuicksaves = ParseInt(sMinNumberOfQuicksaves);
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Max number of quicksaves: ");
                String sMaxNumberOfQuicksaves = GUILayout.TextField(Configuration.MaxNumberOfQuicksaves.ToString(), STYLE_CONFIG_TEXTFIELD);
                GUILayout.Space(CONFIG_TEXTFIELD_RIGHT_MARGIN);
                Configuration.MaxNumberOfQuicksaves = ParseInt(sMaxNumberOfQuicksaves);
                GUILayout.EndHorizontal();

                GUILayout.Space(20);
                GUILayout.BeginHorizontal();
                GUILayout.Label("Max number of launch saves: ");
                String sMaxNumberOfLaunchsaves = GUILayout.TextField(Configuration.MaxNumberOfLaunchsaves.ToString(), STYLE_CONFIG_TEXTFIELD);
                GUILayout.Space(CONFIG_TEXTFIELD_RIGHT_MARGIN);
                Configuration.MaxNumberOfLaunchsaves = ParseInt(sMaxNumberOfLaunchsaves);
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Max number of scene change saves: ");
                String sMaxNumberOfScenesaves = GUILayout.TextField(Configuration.MaxNumberOfScenesaves.ToString(), STYLE_CONFIG_TEXTFIELD);
                GUILayout.Space(CONFIG_TEXTFIELD_RIGHT_MARGIN);
                Configuration.MaxNumberOfScenesaves = ParseInt(sMaxNumberOfScenesaves);
                GUILayout.EndHorizontal();


                GUILayout.EndVertical();
                GUILayout.Space(20);
            }
            break;

            case ConfigPanel.Editor:
            {
                GUILayout.Space(15);
                Configuration.saveVesselInEditor = GUILayout.Toggle(Configuration.saveVesselInEditor, "Auto-save vessels in the editor");
                GUI.enabled = Configuration.saveVesselInEditor;
                GUILayout.BeginHorizontal();
                GUILayout.Label("Time interval between autosaves (in seconds): ");
                String sEditorTimeToSave = GUILayout.TextField(Configuration.editorTimeIntervalToSave.ToString(), STYLE_CONFIG_TEXTFIELD);
                GUILayout.Space(CONFIG_TEXTFIELD_RIGHT_MARGIN);
                Configuration.editorTimeIntervalToSave = ParseInt(sEditorTimeToSave);
                GUILayout.EndHorizontal();

                GUI.enabled = true;
                GUILayout.EndVertical();
                GUILayout.Space(20);
            }
            break;

            case ConfigPanel.Sound:
                GUILayout.Space(15);
                Configuration.SoundOnSave = GUILayout.Toggle(Configuration.SoundOnSave, "Enable sound on quicksave");

                if (Configuration.SoundOnSave)
                {
                    GUILayout.Space(15);

                    if (files == null)
                    {
                        files = Directory.GetFiles(KSPUtil.ApplicationRootPath + "GameData/" + Configuration.AUDIO_DIR, "*");
                    }
                    audioListscrollPosition = GUILayout.BeginScrollView(audioListscrollPosition, GUI.skin.box, GUILayout.Height(160));
                    int cnt = 0;

                    foreach (var name in files)
                    {
                        var shortName = Path.GetFileNameWithoutExtension(name);
                        if (selectedAudio == -1 && Configuration.AUDIO_DIR + shortName == Configuration.SoundLocation)
                        {
                            selectedAudio = cnt;
                        }
                        GUILayout.BeginHorizontal();
                        btnStyle.normal.textColor = (cnt == selectedAudio) ? Color.green : GUI.skin.button.normal.textColor;
                        if (GUILayout.Button(shortName, btnStyle, GUILayout.Width(400)))
                        {
                            selectedAudio = cnt;
                            Configuration.SoundLocation = Configuration.AUDIO_DIR + shortName;
                        }
                        if (GUILayout.Button("►", btnStyle, GUILayout.Width(25)))
                        {
                            Audio.InitializeAudio();
                            Audio.markerAudio.PlayOneShot(GameDatabase.Instance.GetAudioClip(Configuration.AUDIO_DIR + shortName));
                        }
                        cnt++;
                        GUILayout.EndHorizontal();
                    }

                    GUILayout.EndScrollView();
                }
                GUILayout.EndVertical();
                break;
            }
            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUILayout.Label("(Click <B>Save Config</b> button to save) ==>");
            if (GUILayout.Button("Save Config", GUI.skin.button))
            {
                Configuration.Save();
                Toggle();
                Quicksave.instance.RestartLoop();
            }
            GUILayout.EndHorizontal();
            GUI.DragWindow();
        }