/** * <summary>Generates a save-able string out of the ActionList resume data.<summary> * <param name = "If set, only data for a given subscene will be saved. If null, only data for the active scene will be saved</param> * <returns>A save-able string out of the ActionList resume data<returns> */ public string GetSaveData(SubScene subScene = null) { PurgeLists(); string localResumeData = ""; for (int i = 0; i < activeLists.Count; i++) { localResumeData += activeLists[i].GetSaveData(subScene); if (i < (activeLists.Count - 1)) { localResumeData += SaveSystem.pipe; } } return(localResumeData); }
public void UnregisterSubScene(SubScene subScene) { if (subScene == null) { return; } foreach (SubScene existingSubScene in subScenes) { if (subScene == existingSubScene) { subScenes.Remove(existingSubScene); return; } } }
private void Awake() { if (!UnityVersionHandler.ObjectIsInActiveScene(gameObject)) { // Register self as a "sub-scene" GameObject subSceneOb = new GameObject(); SubScene newSubScene = subSceneOb.AddComponent <SubScene>(); newSubScene.Initialise(this); return; } ownKickStarter = GetComponent <KickStarter>(); GameObject taggedMainCamera = GameObject.FindWithTag(Tags.mainCamera); if (taggedMainCamera == null) { ACDebug.LogError("No MainCamera found - please click 'Organise room objects' in the Scene Manager to create one."); } else { if (taggedMainCamera.GetComponent <MainCamera>() == null && taggedMainCamera.GetComponentInParent <MainCamera>() == null) { ACDebug.LogError("MainCamera has no MainCamera component."); } } if (ownKickStarter != null) { KickStarter.mainCamera.OnAwake(); ownKickStarter.OnAwake(); KickStarter.playerInput.OnAwake(); KickStarter.playerQTE.OnAwake(); KickStarter.sceneSettings.OnAwake(); KickStarter.dialog.OnAwake(); KickStarter.navigationManager.OnAwake(); KickStarter.actionListManager.OnAwake(); KickStarter.stateHandler.RegisterWithGameEngine(); } else { ACDebug.LogError("No KickStarter component found in the scene!"); } }
/** * <summary>Removes a scene, without affecting any other open scenes, provided multiple scenes are open. If the active scene is removed, the last-added sub-scene will become the new active scene.</summary> * <param name = "sceneInfo">The SceneInfo of the new scene to remove</param> */ public bool RemoveScene(SceneInfo sceneInfo) { // Kill actionlists KickStarter.actionListManager.KillAllFromScene(sceneInfo); if (thisSceneInfo.Matches(sceneInfo)) { // Want to close active scene if (subScenes == null || subScenes.Count == 0) { ACDebug.LogWarning("Cannot remove scene " + sceneInfo.number + ", as it is the only one open!"); return(false); } // Save active scene KickStarter.levelStorage.StoreCurrentLevelData(); // Make the last-opened subscene the new active one SubScene lastSubScene = subScenes [subScenes.Count - 1]; KickStarter.mainCamera.gameObject.SetActive(false); lastSubScene.MakeMain(); subScenes.Remove(lastSubScene); StartCoroutine(CloseScene(thisSceneInfo)); thisSceneInfo = lastSubScene.SceneInfo; return(true); } // Want to remove a sub-scene for (int i = 0; i < subScenes.Count; i++) { if (subScenes[i].SceneInfo.Matches(sceneInfo)) { // Save sub scene KickStarter.levelStorage.StoreSubSceneData(subScenes[i]); StartCoroutine(CloseScene(subScenes[i].SceneInfo)); subScenes.RemoveAt(i); return(true); } } return(false); }
private List <TransformData> PopulateTransformData(SubScene subScene) { List <TransformData> allTransformData = new List <TransformData>(); RememberTransform[] transforms = UnityVersionHandler.GetOwnSceneComponents <RememberTransform> ((subScene != null) ? subScene.gameObject : null); foreach (RememberTransform _transform in transforms) { if (_transform.constantID != 0) { allTransformData.Add(_transform.SaveTransformData()); } else { ACDebug.LogWarning("GameObject " + _transform.name + " was not saved because its ConstantID has not been set!", _transform); } } return(allTransformData); }
/** * <summary>Recreates ActionList resume data from a saved data string.</summary> * <param name = "If set, the data is for a subscene and so existing data will not be cleared.</param> * <param name = "_localResumeData">The saved data string</param> */ public void LoadData(string _dataString, SubScene subScene = null) { if (subScene == null) { activeLists.Clear(); } if (!string.IsNullOrEmpty(_dataString)) { string[] dataArray = _dataString.Split(SaveSystem.pipe[0]); foreach (string chunk in dataArray) { ActiveList activeList = new ActiveList(); if (activeList.LoadData(chunk, subScene)) { activeLists.Add(activeList); } } } }
private List <ScriptData> PopulateScriptData(SubScene subScene) { List <ScriptData> allScriptData = new List <ScriptData>(); Remember[] scripts = UnityVersionHandler.GetOwnSceneComponents <Remember> ((subScene != null) ? subScene.gameObject : null); foreach (Remember _script in scripts) { if (_script.constantID != 0) { allScriptData.Add(new ScriptData(_script.constantID, _script.SaveData())); } else { ACDebug.LogWarning("GameObject " + _script.name + " was not saved because its ConstantID has not been set!"); } } return(allScriptData); }
private void LoadSceneData(SingleLevelData levelData, SubScene subScene = null) { Scene scene = (subScene != null) ? subScene.gameObject.scene : SceneChanger.CurrentScene; SceneSettings sceneSettings = (subScene == null) ? KickStarter.sceneSettings : subScene.SceneSettings; LocalVariables localVariables = (subScene == null) ? KickStarter.localVariables : subScene.LocalVariables; KickStarter.actionListManager.LoadData(levelData.activeLists, subScene); UnloadCutsceneOnLoad(levelData.onLoadCutscene, sceneSettings); UnloadCutsceneOnStart(levelData.onStartCutscene, sceneSettings); UnloadNavMesh(levelData.navMesh, sceneSettings); UnloadPlayerStart(levelData.playerStart, sceneSettings); UnloadSortingMap(levelData.sortingMap, sceneSettings); UnloadTintMap(levelData.tintMap, sceneSettings); UnloadTransformData(levelData.allTransformData, scene); UnloadScriptData(levelData.allScriptData, scene); localVariables.localVars = SaveSystem.UnloadVariablesData(levelData.localVariablesData, localVariables.localVars); }
/** * <summary>Combs a sub-scene for data to store, combines it into a SingleLevelData variable, and adds it to the SingleLevelData List, allLevelData.</summary> * <param name = "subScene">The SubScene component associated with the sub-scene</param> */ public void StoreSubSceneData(SubScene subScene) { SendSceneToData(subScene); }
protected void OnAddSubScene(SubScene subScene) { IgnoreNavMeshCollisions(); }
private void SendDataToScene(SingleLevelData levelData, bool restoringSaveFile, SubScene subScene = null) { SceneSettings sceneSettings = (subScene == null) ? KickStarter.sceneSettings : subScene.SceneSettings; LocalVariables localVariables = (subScene == null) ? KickStarter.localVariables : subScene.LocalVariables; KickStarter.actionListManager.LoadData(levelData.activeLists, subScene); UnloadCutsceneOnLoad(levelData.onLoadCutscene, sceneSettings); UnloadCutsceneOnStart(levelData.onStartCutscene, sceneSettings); UnloadNavMesh(levelData.navMesh, sceneSettings); UnloadPlayerStart(levelData.playerStart, sceneSettings); UnloadSortingMap(levelData.sortingMap, sceneSettings); UnloadTintMap(levelData.tintMap, sceneSettings); UnloadTransformData(levelData.allTransformData, subScene); foreach (ScriptData _scriptData in levelData.allScriptData) { if (_scriptData.data != null && _scriptData.data.Length > 0) { // Get objects in active scene, and "DontDestroyOnLoad" scene Remember[] saveObjects = Serializer.returnComponents <Remember> (_scriptData.objectID, (subScene != null) ? subScene.gameObject : null); foreach (Remember saveObject in saveObjects) { if (saveObject != null) { if ((subScene != null && UnityVersionHandler.ObjectIsInScene(saveObject.gameObject, levelData.sceneNumber)) || (subScene == null && UnityVersionHandler.ObjectIsInActiveScene(saveObject.gameObject))) { // May have more than one Remember script on the same object, so check all Remember[] saveScripts = saveObject.gameObject.GetComponents <Remember>(); foreach (Remember saveScript in saveScripts) { saveScript.LoadData(_scriptData.data, restoringSaveFile); } } } } } } UnloadVariablesData(levelData.localVariablesData, localVariables); }
private void UnloadTransformData(List <TransformData> _transforms, SubScene subScene) { // Delete any objects (if told to) RememberTransform[] currentTransforms = UnityVersionHandler.GetOwnSceneComponents <RememberTransform> ((subScene != null) ? subScene.gameObject : null); foreach (RememberTransform transformOb in currentTransforms) { if (transformOb.saveScenePresence) { // Was object not saved? bool found = false; foreach (TransformData _transform in _transforms) { if (_transform.objectID == transformOb.constantID) { found = !_transform.savePrevented; } } if (!found) { // Can't find: delete KickStarter.sceneChanger.ScheduleForDeletion(transformOb.gameObject); } } } Object[] prefabAssets = Resources.LoadAll("SaveableData/Prefabs", typeof(GameObject)); if (prefabAssets == null || prefabAssets.Length == 0) { prefabAssets = Resources.LoadAll("", typeof(GameObject)); } foreach (TransformData _transform in _transforms) { RememberTransform saveObject = Serializer.returnComponent <RememberTransform> (_transform.objectID, (subScene != null) ? subScene.gameObject : null); if (saveObject == null) { // Restore any deleted objects (if told to) if (_transform.bringBack && !_transform.savePrevented) { bool foundObject = false; foreach (Object prefabAsset in prefabAssets) { if (prefabAsset is GameObject) { GameObject prefabGameObject = (GameObject)prefabAsset; if (prefabGameObject.GetComponent <RememberTransform>()) { int prefabID = prefabGameObject.GetComponent <ConstantID>().constantID; if ((_transform.linkedPrefabID != 0 && prefabID == _transform.linkedPrefabID) || (_transform.linkedPrefabID == 0 && prefabID == _transform.objectID)) { GameObject newObject = (GameObject)Instantiate(prefabGameObject); newObject.name = prefabGameObject.name; saveObject = newObject.GetComponent <RememberTransform>(); foundObject = true; if (_transform.linkedPrefabID != 0 && prefabID == _transform.linkedPrefabID) { // Spawned object has wrong ID, re-assign it ConstantID[] idScripts = saveObject.GetComponents <ConstantID>(); foreach (ConstantID idScript in idScripts) { idScript.constantID = _transform.objectID; } } break; } } } } if (!foundObject) { ACDebug.LogWarning("Could not find Resources prefab with ID " + _transform.objectID + " - is it placed in a Resources folder?"); } } } if (saveObject != null) { saveObject.LoadTransformData(_transform); } } Resources.UnloadUnusedAssets(); KickStarter.stateHandler.IgnoreNavMeshCollisions(); }
/** * <summary>Converts the class's data into a string that can be saved.</summary> * <param name = "subScene">If set, only data for a given subscene will be saved. If null, only data for the active scene will be saved</param> * <returns>The class's data, converted to a string</returns> */ public string GetSaveData(SubScene subScene) { string ID = string.Empty; string convID = string.Empty; if (IsRunning()) { // Unless ActionLists can be saved mid-stream, don't save info about those currently-running return(string.Empty); } string parameterData = string.Empty; if (actionListAsset != null) { ID = AdvGame.PrepareStringForSaving(actionListAsset.name); } else if (actionList != null) { if (actionList.GetComponent <ConstantID>()) { ID = actionList.GetComponent <ConstantID>().constantID.ToString(); if (subScene == null && UnityVersionHandler.ObjectIsInActiveScene(actionList.gameObject)) { // OK } else if (subScene && UnityVersionHandler.GetSceneIndexFromGameObject(actionList.gameObject) == subScene.SceneIndex) { // OK } else { return(string.Empty); } } else { ACDebug.LogWarning("Data for the ActionList '" + actionList.gameObject.name + "' was not saved because it has no Constant ID.", actionList.gameObject); return(""); } } if (actionList != null) { parameterData = actionList.GetParameterData(); } if (conversationOnEnd && conversationOnEnd.GetComponent <ConstantID>()) { convID = conversationOnEnd.GetComponent <ConstantID>().ToString(); } return(ID + SaveSystem.colon + ConvertIndicesToString() + SaveSystem.colon + startIndex + SaveSystem.colon + ((inSkipQueue) ? 1 : 0) + SaveSystem.colon + ((isRunning) ? 1 : 0) + SaveSystem.colon + convID + SaveSystem.colon + parameterData); }
private void UnloadTransformData(List <TransformData> _transforms, SubScene subScene) { // Delete any objects (if told to) RememberTransform[] currentTransforms = UnityVersionHandler.GetOwnSceneComponents <RememberTransform> ((subScene != null) ? subScene.gameObject : null); foreach (RememberTransform transformOb in currentTransforms) { if (transformOb.saveScenePresence) { // Was object not saved? bool found = false; foreach (TransformData _transform in _transforms) { if (_transform.objectID == transformOb.constantID) { found = true; } } if (!found) { // Can't find: delete KickStarter.sceneChanger.ScheduleForDeletion(transformOb.gameObject); } } } foreach (TransformData _transform in _transforms) { RememberTransform saveObject = Serializer.returnComponent <RememberTransform> (_transform.objectID); // Restore any deleted objects (if told to) if (saveObject == null && _transform.bringBack) { Object[] assets = Resources.LoadAll("SaveableData/Prefabs", typeof(GameObject)); if (assets == null || assets.Length == 0) { assets = Resources.LoadAll("", typeof(GameObject)); } foreach (Object asset in assets) { if (asset is GameObject) { GameObject assetObject = (GameObject)asset; if (assetObject.GetComponent <RememberTransform>() && assetObject.GetComponent <RememberTransform>().constantID == _transform.objectID) { GameObject newObject = (GameObject)Instantiate(assetObject.gameObject); newObject.name = assetObject.name; saveObject = newObject.GetComponent <RememberTransform>(); } } } Resources.UnloadUnusedAssets(); } if (saveObject != null) { saveObject.LoadTransformData(_transform); } } KickStarter.stateHandler.GatherObjects(); }
private void SaveSceneData(SubScene subScene = null) { Scene scene = (subScene) ? subScene.gameObject.scene : SceneChanger.CurrentScene; SceneSettings sceneSettings = (subScene == null) ? KickStarter.sceneSettings : subScene.SceneSettings; LocalVariables localVariables = (subScene == null) ? KickStarter.localVariables : subScene.LocalVariables; List <TransformData> thisLevelTransforms = PopulateTransformData(scene); List <ScriptData> thisLevelScripts = PopulateScriptData(scene); SingleLevelData thisLevelData = new SingleLevelData(); thisLevelData.sceneNumber = (subScene == null) ? SceneChanger.CurrentSceneIndex : subScene.SceneIndex; thisLevelData.activeLists = KickStarter.actionListManager.GetSaveData(subScene); if (sceneSettings) { if (sceneSettings.navMesh) { thisLevelData.navMesh = Serializer.GetConstantID(sceneSettings.navMesh.gameObject, false); } if (sceneSettings.defaultPlayerStart) { thisLevelData.playerStart = Serializer.GetConstantID(sceneSettings.defaultPlayerStart.gameObject, false); } if (sceneSettings.sortingMap) { thisLevelData.sortingMap = Serializer.GetConstantID(sceneSettings.sortingMap.gameObject, false); } if (sceneSettings.cutsceneOnLoad) { thisLevelData.onLoadCutscene = Serializer.GetConstantID(sceneSettings.cutsceneOnLoad.gameObject, false); } if (sceneSettings.cutsceneOnStart) { thisLevelData.onStartCutscene = Serializer.GetConstantID(sceneSettings.cutsceneOnStart.gameObject, false); } if (sceneSettings.tintMap) { thisLevelData.tintMap = Serializer.GetConstantID(sceneSettings.tintMap.gameObject, false); } } if (localVariables) { thisLevelData.localVariablesData = SaveSystem.CreateVariablesData(localVariables.localVars, false, VariableLocation.Local); } thisLevelData.allTransformData = thisLevelTransforms; thisLevelData.allScriptData = thisLevelScripts; if (allLevelData == null) { allLevelData = new List <SingleLevelData>(); } for (int i = 0; i < allLevelData.Count; i++) { if (allLevelData[i].DataMatchesScene(thisLevelData)) { allLevelData[i] = thisLevelData; return; } } allLevelData.Add(thisLevelData); }
/** * <summary>Combs a sub-scene for data to store, combines it into a SingleLevelData variable, and adds it to the SingleLevelData List, allLevelData.</summary> * <param name = "subScene">The SubScene component associated with the sub-scene</param> */ public void StoreSubSceneData(SubScene subScene) { SaveSceneData(subScene); }
public override float Run() { if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow) { PlayerPrefab newPlayerPrefab = KickStarter.settingsManager.GetPlayerPrefab(playerID); if (newPlayerPrefab != null) { if (KickStarter.player != null && KickStarter.player.ID == playerID) { Log("Cannot switch Player - already controlling the desired character."); return(0f); } if (newPlayerPrefab.playerOb != null) { KickStarter.playerInteraction.StopMovingToHotspot(); KickStarter.saveSystem.SaveCurrentPlayerData(); if (takeOldPlayerPosition) { if (KickStarter.player != null) { if (keepInventory) { KickStarter.saveSystem.AssignItemsToPlayer(KickStarter.runtimeInventory.PlayerInvCollection, playerID); } _Camera oldCamera = KickStarter.mainCamera.attachedCamera; KickStarter.player.RemoveFromScene(); // Transfer open sub-scene data since both are in the same scene PlayerData tempPlayerData = new PlayerData(); tempPlayerData = KickStarter.sceneChanger.SavePlayerData(tempPlayerData); string openSubSceneData = tempPlayerData.openSubScenes; PlayerData newPlayerData = KickStarter.saveSystem.GetPlayerData(playerID); newPlayerData.openSubScenes = openSubSceneData; // Force-set position / scene PlayerData oldPlayerData = KickStarter.saveSystem.GetPlayerData(KickStarter.saveSystem.CurrentPlayerID); newPlayerData.CopyPosition(oldPlayerData); newPlayerData.UpdatePresenceInScene(); oldPlayerData.currentScene = -1; Player newPlayer = newPlayerPrefab.GetSceneInstance(true); KickStarter.player = newPlayer; if (KickStarter.player != null) { KickStarter.player.EndPath(); KickStarter.player.StopFollowing(); } // Same camera if (oldCamera != null && KickStarter.mainCamera.attachedCamera != oldCamera) { oldCamera.MoveCameraInstant(); KickStarter.mainCamera.SetGameCamera(oldCamera); } return(0f); } else { LogWarning("Cannot take the old Player's position because no Player is currently active!"); } } else { if (KickStarter.player != null) { if (stopOldMoving || !KickStarter.player.IsPathfinding()) { KickStarter.player.EndPath(); } } if (keepInventory) { KickStarter.saveSystem.AssignItemsToPlayer(KickStarter.runtimeInventory.PlayerInvCollection, playerID); } int sceneIndexToLoad = KickStarter.saveSystem.GetPlayerSceneIndex(playerID); if (sceneIndexToLoad < 0) { bool hasData = (KickStarter.saveSystem.GetPlayerData(playerID) != null); if (hasData) { LogWarning("Cannot switch to Player ID " + playerID + " because their current scene index = " + sceneIndexToLoad); } else { LogWarning("Cannot switch to Player ID " + playerID + " because no save data was found for them."); } return(0f); } SubScene subScene = KickStarter.sceneChanger.GetSubScene(sceneIndexToLoad); if (subScene == null && SceneChanger.CurrentSceneIndex != sceneIndexToLoad) { // Different scene, and not open as a sub-scene if (KickStarter.player != null) { KickStarter.player.Halt(); } KickStarter.saveSystem.SwitchToPlayerInDifferentScene(playerID, sceneIndexToLoad, assignScreenOverlay); return(0f); } // Same scene // Transfer open sub-scene data since both are in the same scene PlayerData tempPlayerData = new PlayerData(); tempPlayerData = KickStarter.sceneChanger.SavePlayerData(tempPlayerData); string openSubSceneData = tempPlayerData.openSubScenes; PlayerData newPlayerData = KickStarter.saveSystem.GetPlayerData(playerID); newPlayerData.openSubScenes = openSubSceneData; Player newPlayer = newPlayerPrefab.GetSceneInstance(true); KickStarter.player = newPlayer; if (stopNewMoving && KickStarter.player != null) { KickStarter.player.EndPath(); KickStarter.player.StopFollowing(); } if (KickStarter.mainCamera.attachedCamera && alwaysSnapCamera) { KickStarter.mainCamera.attachedCamera.MoveCameraInstant(); } } } else { LogWarning("Cannot switch to an empty Player - no Player prefab is defined for ID " + playerID + "."); } } else { LogWarning("Cannot switch Player - no Player prefab is defined."); } } return(0f); }
/** * <summary>Restores the class's data from a saved string.</summary> * <param name = "data">The saved string to restore from</param> * <param name = "subScene">If set, only data for a given subscene will be loaded. If null, only data for the active scene will be loaded</param> * <returns>True if the data was successfully restored</returns> */ public bool LoadData(string dataString, SubScene subScene = null) { if (string.IsNullOrEmpty(dataString)) { return(false); } string[] dataArray = dataString.Split(SaveSystem.colon[0]); // ID string listName = AdvGame.PrepareStringForLoading(dataArray[0]); resumeIndices = new int[0]; // Resume string[] resumeData = dataArray[1].Split("]"[0]); if (resumeData.Length > 0) { List <int> resumeIndexList = new List <int>(); for (int i = 0; i < resumeData.Length; i++) { int resumeIndex = -1; if (int.TryParse(resumeData[i], out resumeIndex) && resumeIndex >= 0) { resumeIndexList.Add(resumeIndex); } } resumeIndices = resumeIndexList.ToArray(); } // StartIndex int.TryParse(dataArray[2], out startIndex); // Skip queue int j = 0; int.TryParse(dataArray[3], out j); inSkipQueue = (j == 1) ? true : false; // IsRunning j = 0; int.TryParse(dataArray[4], out j); isRunning = (j == 1) ? true : false; // Conversation on end int convID = 0; int.TryParse(dataArray[5], out convID); if (convID != 0) { if (subScene != null) { conversationOnEnd = ConstantID.GetComponent <Conversation> (convID, subScene.gameObject.scene); } else { conversationOnEnd = ConstantID.GetComponent <Conversation> (convID); } } // Parameter data parameterData = dataArray[6]; // ActionList int ID = 0; if (int.TryParse(listName, out ID)) { // Scene ConstantID constantID = null; if (subScene != null) { constantID = ConstantID.GetComponent(ID, subScene.gameObject.scene); } else { constantID = ConstantID.GetComponent(ID); } if (constantID && constantID.GetComponent <ActionList>() != null) { actionList = constantID.GetComponent <ActionList>(); return(true); } } else { // Asset file ActionListAsset tempAsset = ScriptableObject.CreateInstance <ActionListAsset> (); actionListAsset = AssetLoader.RetrieveAsset <ActionListAsset> (tempAsset, listName); if (actionListAsset && actionListAsset != tempAsset) { return(true); } ACDebug.LogWarning("Could not restore data related to the ActionList asset '" + listName + "' - to restore it correctly, the asset must be placed in a folder named Resources."); } return(false); }
private void SendSceneToData(SubScene subScene = null) { SceneSettings sceneSettings = (subScene == null) ? KickStarter.sceneSettings : subScene.SceneSettings; LocalVariables localVariables = (subScene == null) ? KickStarter.localVariables : subScene.LocalVariables; List <TransformData> thisLevelTransforms = PopulateTransformData(subScene); List <ScriptData> thisLevelScripts = PopulateScriptData(subScene); SingleLevelData thisLevelData = new SingleLevelData(); thisLevelData.sceneNumber = (subScene == null) ? UnityVersionHandler.GetCurrentSceneNumber() : subScene.SceneInfo.number; thisLevelData.activeLists = KickStarter.actionListManager.GetSaveData(subScene); if (sceneSettings != null) { if (sceneSettings.navMesh && sceneSettings.navMesh.GetComponent <ConstantID>()) { thisLevelData.navMesh = Serializer.GetConstantID(sceneSettings.navMesh.gameObject); } if (sceneSettings.defaultPlayerStart && sceneSettings.defaultPlayerStart.GetComponent <ConstantID>()) { thisLevelData.playerStart = Serializer.GetConstantID(sceneSettings.defaultPlayerStart.gameObject); } if (sceneSettings.sortingMap && sceneSettings.sortingMap.GetComponent <ConstantID>()) { thisLevelData.sortingMap = Serializer.GetConstantID(sceneSettings.sortingMap.gameObject); } if (sceneSettings.cutsceneOnLoad && sceneSettings.cutsceneOnLoad.GetComponent <ConstantID>()) { thisLevelData.onLoadCutscene = Serializer.GetConstantID(sceneSettings.cutsceneOnLoad.gameObject); } if (sceneSettings.cutsceneOnStart && sceneSettings.cutsceneOnStart.GetComponent <ConstantID>()) { thisLevelData.onStartCutscene = Serializer.GetConstantID(sceneSettings.cutsceneOnStart.gameObject); } if (sceneSettings.tintMap && sceneSettings.tintMap.GetComponent <ConstantID>()) { thisLevelData.tintMap = Serializer.GetConstantID(sceneSettings.tintMap.gameObject); } } thisLevelData.localVariablesData = SaveSystem.CreateVariablesData(localVariables.localVars, false, VariableLocation.Local); thisLevelData.allTransformData = thisLevelTransforms; thisLevelData.allScriptData = thisLevelScripts; bool found = false; for (int i = 0; i < allLevelData.Count; i++) { if (allLevelData[i].sceneNumber == thisLevelData.sceneNumber) { allLevelData[i] = thisLevelData; found = true; break; } } if (!found) { allLevelData.Add(thisLevelData); } }