/**
         * <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!");
            }
        }
Exemple #4
0
        /**
         * <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);
        }
Exemple #5
0
        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);
                    }
                }
            }
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #9
0
 /**
  * <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);
 }
Exemple #10
0
 protected void OnAddSubScene(SubScene subScene)
 {
     IgnoreNavMeshCollisions();
 }
Exemple #11
0
        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);
        }
Exemple #12
0
        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();
        }
Exemple #13
0
        /**
         * <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);
        }
Exemple #14
0
        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();
        }
Exemple #15
0
        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);
        }
Exemple #16
0
 /**
  * <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);
 }
Exemple #17
0
        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);
        }
Exemple #18
0
        /**
         * <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);
        }
Exemple #19
0
        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);
            }
        }