public void gameSceneEvent(GameScenes scene) { if (!KCT_GameStates.settings.enabledForSave) { return; } List <GameScenes> validScenes = new List <GameScenes> { GameScenes.SPACECENTER, GameScenes.TRACKSTATION, GameScenes.SPH, GameScenes.EDITOR }; if (validScenes.Contains(scene)) { //Check for simulation save and load it. if (System.IO.File.Exists(KSPUtil.ApplicationRootPath + "saves/" + HighLogic.SaveFolder + "/KCT_simulation_backup.sfs")) { KCT_Utilities.LoadSimulationSave(); } } if (!HighLogic.LoadedSceneIsFlight && scene == GameScenes.FLIGHT && KCT_GameStates.flightSimulated) //Backup save at simulation start { KCT_Utilities.MakeSimulationSave(); } if (HighLogic.LoadedScene == scene && (scene == GameScenes.EDITOR || scene == GameScenes.SPH)) //Fix for null reference when using new or load buttons in editor { GamePersistence.SaveGame("persistent", HighLogic.SaveFolder, SaveMode.OVERWRITE); } if (scene == GameScenes.MAINMENU) { KCT_GameStates.reset(); KCT_GameStates.firstStart = true; KCT_Utilities.disableSimulationLocks(); InputLockManager.RemoveControlLock("KCTLaunchLock"); } if (HighLogic.LoadedSceneIsEditor) { EditorLogic.fetch.Unlock("KCTEditorMouseLock"); } }
public void Start() { KCT_GameStates.settings.Load(); //Load the settings file, if it exists KCT_GameStates.settings.Save(); //Save the settings file, with defaults if it doesn't exist KCT_GameStates.timeSettings.Load(); //Load the time settings KCT_GameStates.timeSettings.Save(); //Save the time settings //Code for saving to the persistence.sfs ProtoScenarioModule scenario = HighLogic.CurrentGame.scenarios.Find(s => s.moduleName == typeof(KerbalConstructionTimeData).Name); if (scenario == null) { try { Debug.Log("[KCT] Adding InternalModule scenario to game '" + HighLogic.CurrentGame.Title + "'"); HighLogic.CurrentGame.AddProtoScenarioModule(typeof(KerbalConstructionTimeData), new GameScenes[] { GameScenes.FLIGHT, GameScenes.SPACECENTER, GameScenes.EDITOR, GameScenes.SPH, GameScenes.TRACKSTATION }); // the game will add this scenario to the appropriate persistent file on save from now on } catch (ArgumentException ae) { Debug.LogException(ae); } catch { Debug.Log("[KCT] Unknown failure while adding scenario."); } } else { if (!scenario.targetScenes.Contains(GameScenes.SPACECENTER)) { scenario.targetScenes.Add(GameScenes.SPACECENTER); } if (!scenario.targetScenes.Contains(GameScenes.FLIGHT)) { scenario.targetScenes.Add(GameScenes.FLIGHT); } if (!scenario.targetScenes.Contains(GameScenes.EDITOR)) { scenario.targetScenes.Add(GameScenes.EDITOR); } if (!scenario.targetScenes.Contains(GameScenes.SPH)) { scenario.targetScenes.Add(GameScenes.SPH); } if (!scenario.targetScenes.Contains(GameScenes.TRACKSTATION)) { scenario.targetScenes.Add(GameScenes.TRACKSTATION); } } //End code for persistence.sfs if (KCT_GUI.PrimarilyDisabled) { if (InputLockManager.GetControlLock("KCTLaunchLock") == ControlTypes.EDITOR_LAUNCH) { InputLockManager.RemoveControlLock("KCTLaunchLock"); } } if (!KCT_Events.instance.eventAdded) { KCT_Events.instance.addEvents(); } if (!KCT_GameStates.settings.enabledForSave) { if (InputLockManager.GetControlLock("KCTKSCLock") == ControlTypes.KSC_FACILITIES) { InputLockManager.RemoveControlLock("KCTKSCLock"); } return; } //Begin primary mod functions KCT_GameStates.UT = Planetarium.GetUniversalTime(); KCT_GUI.guiDataSaver.Load(); if (HighLogic.LoadedSceneIsEditor) { if (KCT_GUI.showSimulationCompleteEditor) { KCT_GUI.hideAll(); KCT_GUI.showSimulationCompleteEditor = true; } else { KCT_GUI.hideAll(); } if (!KCT_GUI.PrimarilyDisabled) { KCT_GUI.showEditorGUI = KCT_GameStates.showWindows[1]; } if (KCT_GameStates.EditorShipEditingMode && KCT_GameStates.delayStart) { KCT_GameStates.delayStart = false; EditorLogic.fetch.shipNameField.Text = KCT_GameStates.editedVessel.shipName; } } else if (HighLogic.LoadedScene == GameScenes.SPACECENTER) { KCT_GUI.hideAll(); KCT_GameStates.reset(); if (HighLogic.CurrentGame.Mode == Game.Modes.SANDBOX) { KCT_GameStates.TotalUpgradePoints = KCT_GameStates.settings.SandboxUpgrades; } } if (HighLogic.LoadedSceneIsFlight && !KCT_GameStates.flightSimulated && FlightGlobals.ActiveVessel.situation == Vessel.Situations.PRELAUNCH && FlightGlobals.ActiveVessel.GetCrewCount() == 0 && KCT_GameStates.launchedCrew.Count > 0) { KerbalRoster roster = HighLogic.CurrentGame.CrewRoster; for (int i = 0; i < FlightGlobals.ActiveVessel.parts.Count; i++) { Part p = FlightGlobals.ActiveVessel.parts[i]; { CrewedPart cP = KCT_GameStates.launchedCrew.Find(part => part.partID == p.uid); if (cP == null) { continue; } List <ProtoCrewMember> crewList = cP.crewList; foreach (ProtoCrewMember crewMember in crewList) { if (crewMember != null) { ProtoCrewMember finalCrewMember = crewMember; foreach (ProtoCrewMember rosterCrew in roster.Crew) { if (rosterCrew.name == crewMember.name) { finalCrewMember = rosterCrew; } } KCTDebug.Log("Assigning " + finalCrewMember.name + " to " + p.partInfo.name); p.AddCrewmemberAt(finalCrewMember, crewList.IndexOf(crewMember)); finalCrewMember.rosterStatus = ProtoCrewMember.RosterStatus.Assigned; if (finalCrewMember.seat != null) { finalCrewMember.seat.SpawnCrew(); } } } } } KCT_GameStates.launchedCrew.Clear(); } }