public void GatherSaveFiles() { foundSaveFiles = new List<SaveFile>(); for (int i=0; i<50; i++) { bool isAutoSave = false; #if UNITY_WEBPLAYER || UNITY_WINRT || UNITY_WII if (PlayerPrefs.HasKey (GetProjectName () + GetSaveIDFile (i))) { string label = "Save " + i.ToString (); if (i == 0) { label = "Autosave"; isAutoSave = true; } foundSaveFiles.Add (new SaveFile (i, label, null, "", isAutoSave, 0)); } #else string filename = saveDirectory + Path.DirectorySeparatorChar.ToString () + GetProjectName () + GetSaveIDFile (i) + GetSaveExtension (); if (File.Exists (filename)) { int updateTime = 0; string label = "Save " + i.ToString (); if (i == 0) { label = "Autosave"; isAutoSave = true; } if (KickStarter.settingsManager.saveTimeDisplay != SaveTimeDisplay.None) { DirectoryInfo dir = new DirectoryInfo (saveDirectory); FileInfo[] info = dir.GetFiles (GetProjectName () + GetSaveIDFile (i) + GetSaveExtension ()); if (!isAutoSave) { System.TimeSpan t = info[0].LastWriteTime - new System.DateTime (2015, 1, 1); updateTime = (int) t.TotalSeconds; } string creationTime = info[0].LastWriteTime.ToShortDateString (); if (KickStarter.settingsManager.saveTimeDisplay == SaveTimeDisplay.TimeAndDate) { creationTime += " " + System.DateTime.Now.ToShortTimeString (); } label += " (" + creationTime + ")"; } Texture2D screenShot = null; if (KickStarter.settingsManager.takeSaveScreenshots) { screenShot = Serializer.LoadScreenshot (GetSaveScreenshotName (i)); } foundSaveFiles.Add (new SaveFile (i, label, screenShot, filename, isAutoSave, updateTime)); } #endif } if (KickStarter.settingsManager.orderSavesByUpdateTime) { foundSaveFiles.Sort (delegate (SaveFile a, SaveFile b) {return a.updatedTime.CompareTo (b.updatedTime);}); } // Now get save file labels if (Options.optionsData.saveFileNames != "") { string[] profilesArray = Options.optionsData.saveFileNames.Split ("|"[0]); foreach (string chunk in profilesArray) { string[] chunkData = chunk.Split (":"[0]); int _id = 0; int.TryParse (chunkData[0], out _id); string _label = chunkData[1]; for (int i=0; i<Mathf.Min (50, foundSaveFiles.Count); i++) { if (foundSaveFiles[i].ID == _id) { SaveFile newSaveFile = new SaveFile (foundSaveFiles [i]); newSaveFile.SetLabel (_label); foundSaveFiles[i] = newSaveFile; } } } } }
public void RenameSave(string newLabel, int saveIndex) { if (newLabel.Length == 0) { return; } GatherSaveFiles (); if (foundSaveFiles.Count > saveIndex && saveIndex >= 0) { SaveFile newSaveFile = new SaveFile (foundSaveFiles [saveIndex]); newSaveFile.SetLabel (newLabel); foundSaveFiles [saveIndex] = newSaveFile; Options.UpdateSaveLabels (foundSaveFiles.ToArray ()); } }
public bool SaveSaveGame(int saveID, bool overwriteLabel = true, string newLabel = "") { if (GetNumSaves () >= KickStarter.settingsManager.maxSaves && !DoesSaveExist (saveID)) { Debug.LogWarning ("Cannot save - maximum number of save files has already been reached."); return false; } CustomSaveHook (); KickStarter.levelStorage.StoreCurrentLevelData (); Player player = KickStarter.player; if (KickStarter.playerInput && KickStarter.runtimeInventory && KickStarter.sceneChanger && KickStarter.settingsManager && KickStarter.stateHandler) { if (saveData != null && saveData.playerData != null && saveData.playerData.Count > 0) { foreach (PlayerData _data in saveData.playerData) { if (player != null && _data.playerID == player.ID) { saveData.playerData.Remove (_data); break; } } } else { saveData = new SaveData (); saveData.mainData = new MainData (); saveData.playerData = new List<PlayerData>(); } PlayerData playerData = SavePlayerData (player); saveData.playerData.Add (playerData); // Main data saveData.mainData.cursorIsOff = KickStarter.stateHandler.cursorIsOff; saveData.mainData.inputIsOff = KickStarter.stateHandler.inputIsOff; saveData.mainData.interactionIsOff = KickStarter.stateHandler.interactionIsOff; saveData.mainData.menuIsOff = KickStarter.stateHandler.menuIsOff; saveData.mainData.movementIsOff = KickStarter.stateHandler.movementIsOff; saveData.mainData.cameraIsOff = KickStarter.stateHandler.cameraIsOff; saveData.mainData.triggerIsOff = KickStarter.stateHandler.triggerIsOff; saveData.mainData.playerIsOff = KickStarter.stateHandler.playerIsOff; saveData.mainData.movementMethod = (int) KickStarter.settingsManager.movementMethod; if (player != null) { saveData.mainData.currentPlayerID = player.ID; } else { saveData.mainData.currentPlayerID = KickStarter.settingsManager.GetEmptyPlayerID (); } saveData.mainData.timeScale = KickStarter.playerInput.timeScale; if (KickStarter.playerInput.activeArrows) { saveData.mainData.activeArrows = Serializer.GetConstantID (KickStarter.playerInput.activeArrows.gameObject); } if (KickStarter.playerInput.activeConversation) { saveData.mainData.activeConversation = Serializer.GetConstantID (KickStarter.playerInput.activeConversation.gameObject); } if (KickStarter.runtimeInventory.selectedItem != null) { saveData.mainData.selectedInventoryID = KickStarter.runtimeInventory.selectedItem.id; saveData.mainData.isGivingItem = KickStarter.runtimeInventory.IsGivingItem (); } else { saveData.mainData.selectedInventoryID = -1; } RuntimeVariables.DownloadAll (); saveData.mainData.runtimeVariablesData = SaveSystem.CreateVariablesData (RuntimeVariables.GetAllVars (), false, VariableLocation.Global); saveData.mainData.menuLockData = CreateMenuLockData (PlayerMenus.GetMenus ()); saveData.mainData.menuVisibilityData = CreateMenuVisibilityData (PlayerMenus.GetMenus ()); saveData.mainData.menuElementVisibilityData = CreateMenuElementVisibilityData (PlayerMenus.GetMenus ()); saveData.mainData.menuJournalData = CreateMenuJournalData (PlayerMenus.GetMenus ()); string mainData = ""; string levelData = ""; if (SaveSystem.GetSaveMethod () == SaveMethod.XML) { mainData = Serializer.SerializeObjectXML <SaveData> (saveData); levelData = Serializer.SerializeObjectXML <List<SingleLevelData>> (KickStarter.levelStorage.allLevelData); } else { mainData = Serializer.SerializeObjectBinary (saveData); levelData = Serializer.SerializeObjectBinary (KickStarter.levelStorage.allLevelData); } string allData = mainData + "||" + levelData; Serializer.CreateSaveFile (GetSaveFileName (saveID), allData); // Update label if (overwriteLabel) { GatherSaveFiles (); for (int i=0; i<Mathf.Min (50, foundSaveFiles.Count); i++) { if (foundSaveFiles[i].ID == saveID) { SaveFile newSaveFile = new SaveFile (foundSaveFiles [i]); if (newLabel.Length > 0) { newSaveFile.SetLabel (newLabel); } else { newSaveFile.SetLabel (GetDefaultSaveLabel (saveID)); } foundSaveFiles[i] = newSaveFile; break; } } } // Update PlayerPrefs Options.optionsData.lastSaveID = saveID; Options.UpdateSaveLabels (foundSaveFiles.ToArray ()); #if !UNITY_WEBPLAYER && !UNITY_WINRT && !UNITY_WII if (KickStarter.settingsManager.takeSaveScreenshots) { StartCoroutine ("TakeScreenshot", GetSaveScreenshotName (saveID)); } else { GatherSaveFiles (); } #else GatherSaveFiles (); #endif } else { if (KickStarter.playerInput == null) { Debug.LogWarning ("Save failed - no PlayerInput found."); } if (KickStarter.runtimeInventory == null) { Debug.LogWarning ("Save failed - no RuntimeInventory found."); } if (KickStarter.sceneChanger == null) { Debug.LogWarning ("Save failed - no SceneChanger found."); } if (KickStarter.settingsManager == null) { Debug.LogWarning ("Save failed - no Settings Manager found."); } } return true; }
/** * <summary>Saves the game, once found to exist.</summary> * <param name = "saveID">The save ID to save</param> * <param name = "overwriteLabel">True if the label should be updated</param> * <param name = "newLabel">The new label, if it can be set. If blank, a default label will be generated.</param> * <returns>True if the save was successful</returns> */ public bool SaveSaveGame(int saveID, bool overwriteLabel = true, string newLabel = "") { if (GetNumSaves () >= KickStarter.settingsManager.maxSaves && !DoesSaveExist (saveID)) { ACDebug.LogWarning ("Cannot save - maximum number of save files has already been reached."); return false; } CustomSaveHook (); KickStarter.levelStorage.StoreCurrentLevelData (); Player player = KickStarter.player; if (KickStarter.playerInput && KickStarter.runtimeInventory && KickStarter.sceneChanger && KickStarter.settingsManager && KickStarter.stateHandler) { if (saveData != null && saveData.playerData != null && saveData.playerData.Count > 0) { foreach (PlayerData _data in saveData.playerData) { if (player != null && _data.playerID == player.ID) { saveData.playerData.Remove (_data); break; } } } else { saveData = new SaveData (); saveData.mainData = new MainData (); saveData.playerData = new List<PlayerData>(); } PlayerData playerData = SavePlayerData (player); saveData.playerData.Add (playerData); // Main data saveData.mainData = KickStarter.stateHandler.SaveMainData (saveData.mainData); saveData.mainData.movementMethod = (int) KickStarter.settingsManager.movementMethod; if (player != null) { saveData.mainData.currentPlayerID = player.ID; } else { saveData.mainData.currentPlayerID = KickStarter.settingsManager.GetEmptyPlayerID (); } saveData.mainData = KickStarter.playerInput.SaveMainData (saveData.mainData); saveData.mainData = KickStarter.runtimeInventory.SaveMainData (saveData.mainData); saveData.mainData = KickStarter.runtimeVariables.SaveMainData (saveData.mainData); saveData.mainData = KickStarter.playerMenus.SaveMainData (saveData.mainData); string mainData = Serializer.SerializeObject <SaveData> (saveData, true); string levelData = Serializer.SerializeAllRoomData (KickStarter.levelStorage.allLevelData); string allData = mainData + "||" + levelData; Serializer.CreateSaveFile (GetSaveFileName (saveID), allData); // Update label if (overwriteLabel) { GatherSaveFiles (); for (int i=0; i<Mathf.Min (50, foundSaveFiles.Count); i++) { if (foundSaveFiles[i].ID == saveID) { SaveFile newSaveFile = new SaveFile (foundSaveFiles [i]); if (newLabel.Length > 0) { newSaveFile.SetLabel (newLabel); } else { newSaveFile.SetLabel (GetDefaultSaveLabel (saveID)); } foundSaveFiles[i] = newSaveFile; break; } } } // Update PlayerPrefs Options.optionsData.lastSaveID = saveID; Options.UpdateSaveLabels (foundSaveFiles.ToArray ()); #if !UNITY_WEBPLAYER && !UNITY_WINRT && !UNITY_WII if (KickStarter.settingsManager.takeSaveScreenshots) { StartCoroutine ("TakeScreenshot", GetSaveScreenshotName (saveID)); } else { GatherSaveFiles (); } #else GatherSaveFiles (); #endif } else { if (KickStarter.playerInput == null) { ACDebug.LogWarning ("Save failed - no PlayerInput found."); } if (KickStarter.runtimeInventory == null) { ACDebug.LogWarning ("Save failed - no RuntimeInventory found."); } if (KickStarter.sceneChanger == null) { ACDebug.LogWarning ("Save failed - no SceneChanger found."); } if (KickStarter.settingsManager == null) { ACDebug.LogWarning ("Save failed - no Settings Manager found."); } } return true; }