/**
         * Combs the scene for data to store, combines it into a SingleLevelData variable, and adds it to the SingleLevelData List, allLevelData.
         */
        public void StoreCurrentLevelData()
        {
            List <TransformData> thisLevelTransforms = PopulateTransformData();
            List <ScriptData>    thisLevelScripts    = PopulateScriptData();

            SingleLevelData thisLevelData = new SingleLevelData();

            thisLevelData.sceneNumber = UnityVersionHandler.GetCurrentSceneNumber();

            thisLevelData.activeLists = KickStarter.actionListManager.GetSaveData();

            if (KickStarter.sceneSettings)
            {
                if (KickStarter.sceneSettings.navMesh && KickStarter.sceneSettings.navMesh.GetComponent <ConstantID>())
                {
                    thisLevelData.navMesh = Serializer.GetConstantID(KickStarter.sceneSettings.navMesh.gameObject);
                }
                if (KickStarter.sceneSettings.defaultPlayerStart && KickStarter.sceneSettings.defaultPlayerStart.GetComponent <ConstantID>())
                {
                    thisLevelData.playerStart = Serializer.GetConstantID(KickStarter.sceneSettings.defaultPlayerStart.gameObject);
                }
                if (KickStarter.sceneSettings.sortingMap && KickStarter.sceneSettings.sortingMap.GetComponent <ConstantID>())
                {
                    thisLevelData.sortingMap = Serializer.GetConstantID(KickStarter.sceneSettings.sortingMap.gameObject);
                }
                if (KickStarter.sceneSettings.cutsceneOnLoad && KickStarter.sceneSettings.cutsceneOnLoad.GetComponent <ConstantID>())
                {
                    thisLevelData.onLoadCutscene = Serializer.GetConstantID(KickStarter.sceneSettings.cutsceneOnLoad.gameObject);
                }
                if (KickStarter.sceneSettings.cutsceneOnStart && KickStarter.sceneSettings.cutsceneOnStart.GetComponent <ConstantID>())
                {
                    thisLevelData.onStartCutscene = Serializer.GetConstantID(KickStarter.sceneSettings.cutsceneOnStart.gameObject);
                }
                if (KickStarter.sceneSettings.tintMap && KickStarter.sceneSettings.tintMap.GetComponent <ConstantID>())
                {
                    thisLevelData.tintMap = Serializer.GetConstantID(KickStarter.sceneSettings.tintMap.gameObject);
                }
            }

            thisLevelData.localVariablesData = SaveSystem.CreateVariablesData(KickStarter.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 == UnityVersionHandler.GetCurrentSceneNumber())
                {
                    allLevelData[i] = thisLevelData;
                    found           = true;
                    break;
                }
            }

            if (!found)
            {
                allLevelData.Add(thisLevelData);
            }
        }
Example #2
0
 /**
  * Wipes the currently-loaded scene's save data from memory
  */
 public void ClearCurrentLevelData()
 {
     foreach (SingleLevelData levelData in allLevelData)
     {
         if (levelData.sceneNumber == UnityVersionHandler.GetCurrentSceneNumber())
         {
             allLevelData.Remove(levelData);
             return;
         }
     }
 }
Example #3
0
        public override float Run()
        {
            if (endGameType == AC_EndGameType.QuitGame)
            {
                                #if UNITY_EDITOR
                UnityEditor.EditorApplication.isPlaying = false;
                                #else
                Application.Quit();
                                #endif
            }
            else if (endGameType == AC_EndGameType.LoadAutosave)
            {
                SaveSystem.LoadAutoSave();
            }
            else
            {
                KickStarter.runtimeInventory.SetNull();
                KickStarter.runtimeInventory.RemoveRecipes();

                if (KickStarter.player)
                {
                    DestroyImmediate(KickStarter.player.gameObject);
                }

                if (endGameType == AC_EndGameType.RestartGame)
                {
                    KickStarter.ResetPlayer(KickStarter.settingsManager.GetDefaultPlayer(), KickStarter.settingsManager.GetDefaultPlayerID(), false, Quaternion.identity);

                    KickStarter.saveSystem.ClearAllData();
                    KickStarter.levelStorage.ClearAllLevelData();
                    KickStarter.runtimeInventory.OnStart();
                    KickStarter.runtimeDocuments.OnStart();
                    KickStarter.runtimeVariables.OnStart();

                    if (resetMenus)
                    {
                        KickStarter.playerMenus.RebuildMenus();
                    }

                    KickStarter.eventManager.Call_OnRestartGame();

                    KickStarter.stateHandler.CanGlobalOnStart();
                    KickStarter.sceneChanger.ChangeScene(new SceneInfo(chooseSceneBy, sceneName, sceneNumber), false, true);
                }
                else if (endGameType == AC_EndGameType.ResetScene)
                {
                    sceneNumber = UnityVersionHandler.GetCurrentSceneNumber();
                    KickStarter.levelStorage.ClearCurrentLevelData();
                    KickStarter.sceneChanger.ChangeScene(new SceneInfo("", sceneNumber), false, true);
                }
            }

            return(0f);
        }
Example #4
0
        /**
         * <summary>Returns the currently-loaded scene's save data to the appropriate Remember components.</summary>
         * <param name = "restoringSaveFile">True if the game is currently loading a saved game file, as opposed to just switching scene</param>
         */
        public void ReturnCurrentLevelData(bool restoringSaveFile)
        {
            // Main scene
            foreach (SingleLevelData levelData in allLevelData)
            {
                if (levelData.sceneNumber == UnityVersionHandler.GetCurrentSceneNumber())
                {
                    SendDataToScene(levelData, restoringSaveFile);
                    break;
                }
            }

            AssetLoader.UnloadAssets();
        }
Example #5
0
        private static void SetLocalPlayerID(Player player)
        {
            player.ID = (-2 - UnityVersionHandler.GetCurrentSceneNumber());              // Always unique to the scene

            if (KickStarter.settingsManager != null && KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow)
            {
                ACDebug.LogWarning("The use of 'in-scene' local Players is not recommended when Player-switching is enabled - consider using the 'Player: Switch' Action to change Player instead.");
            }

            if (KickStarter.saveSystem != null && KickStarter.saveSystem.DoesPlayerDataExist(player.ID))
            {
                KickStarter.saveSystem.AssignPlayerAnimData(player);
            }
        }
        override public bool CheckCondition()
        {
            int    actualSceneNumber = 0;
            string actualSceneName   = "";

            if (sceneToCheck == SceneToCheck.Previous)
            {
                actualSceneNumber = KickStarter.sceneChanger.previousSceneInfo.number;
                actualSceneName   = KickStarter.sceneChanger.previousSceneInfo.name;
            }
            else
            {
                actualSceneNumber = UnityVersionHandler.GetCurrentSceneNumber();
                actualSceneName   = UnityVersionHandler.GetCurrentSceneName();
            }

            if (intCondition == IntCondition.EqualTo)
            {
                if (chooseSceneBy == ChooseSceneBy.Name && actualSceneName == AdvGame.ConvertTokens(sceneName))
                {
                    return(true);
                }

                if (chooseSceneBy == ChooseSceneBy.Number && actualSceneNumber == sceneNumber)
                {
                    return(true);
                }
            }

            else if (intCondition == IntCondition.NotEqualTo)
            {
                if (chooseSceneBy == ChooseSceneBy.Name && actualSceneName != AdvGame.ConvertTokens(sceneName))
                {
                    return(true);
                }

                if (chooseSceneBy == ChooseSceneBy.Number && actualSceneNumber != sceneNumber)
                {
                    return(true);
                }
            }

            return(false);
        }
        /**
         * <summary>Returns the currently-loaded scene's save data to the appriopriate Remember components.</summary>
         * <param name = "restoringSaveFile">True if the game is currently loading a saved game file, as opposed to just switching scene</param>
         */
        public void ReturnCurrentLevelData(bool restoringSaveFile)
        {
            foreach (SingleLevelData levelData in allLevelData)
            {
                if (levelData.sceneNumber == UnityVersionHandler.GetCurrentSceneNumber())
                {
                    KickStarter.actionListManager.LoadData(levelData.activeLists);

                    UnloadCutsceneOnLoad(levelData.onLoadCutscene);
                    UnloadCutsceneOnStart(levelData.onStartCutscene);
                    UnloadNavMesh(levelData.navMesh);
                    UnloadPlayerStart(levelData.playerStart);
                    UnloadSortingMap(levelData.sortingMap);
                    UnloadTintMap(levelData.tintMap);

                    UnloadTransformData(levelData.allTransformData);

                    foreach (ScriptData _scriptData in levelData.allScriptData)
                    {
                        Remember saveObject = Serializer.returnComponent <Remember> (_scriptData.objectID);
                        if (saveObject != null && _scriptData.data != null && _scriptData.data.Length > 0)
                        {
                            // 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);
                    KickStarter.sceneSettings.UpdateAllSortingMaps();

                    break;
                }
            }

            AssetLoader.UnloadAssets();
        }
        override public 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 prefab.");
                        return(0f);
                    }

                    if (newPlayerPrefab.playerOb != null)
                    {
                        KickStarter.saveSystem.SaveCurrentPlayerData();

                        Vector3    oldPlayerPosition = Vector3.zero;
                        Quaternion oldPlayerRotation = new Quaternion();
                        Vector3    oldPlayerScale    = Vector3.one;

                        PlayerData oldPlayerData         = new PlayerData();
                        NPCData    oldNPCData            = new NPCData();
                        bool       recordedOldPlayerData = false;
                        bool       recordedOldNPCData    = false;

                        if (KickStarter.player != null)
                        {
                            oldPlayerPosition = KickStarter.player.transform.position;
                            oldPlayerRotation = KickStarter.player.TransformRotation;
                            oldPlayerScale    = KickStarter.player.transform.localScale;

                            oldPlayerData         = KickStarter.player.SavePlayerData(oldPlayerData);
                            recordedOldPlayerData = true;
                        }

                        if (newPlayerPosition != NewPlayerPosition.ReplaceCurrentPlayer)
                        {
                            if (oldPlayer == OldPlayer.ReplaceWithAssociatedNPC &&
                                (runtimeOldPlayerNPC == null || !runtimeOldPlayerNPC.gameObject.activeInHierarchy) &&
                                KickStarter.player.associatedNPCPrefab != null)
                            {
                                GameObject newObject = (GameObject)Instantiate(KickStarter.player.associatedNPCPrefab.gameObject);
                                newObject.name      = KickStarter.player.associatedNPCPrefab.gameObject.name;
                                runtimeOldPlayerNPC = newObject.GetComponent <NPC>();
                            }

                            if ((oldPlayer == OldPlayer.ReplaceWithNPC || oldPlayer == OldPlayer.ReplaceWithAssociatedNPC) &&
                                runtimeOldPlayerNPC != null && runtimeOldPlayerNPC.gameObject.activeInHierarchy)
                            {
                                runtimeOldPlayerNPC.Teleport(oldPlayerPosition);
                                runtimeOldPlayerNPC.TransformRotation    = oldPlayerRotation;
                                runtimeOldPlayerNPC.transform.localScale = oldPlayerScale;

                                if (recordedOldPlayerData)
                                {
                                    ApplyRenderData(runtimeOldPlayerNPC, oldPlayerData);
                                }

                                // Force the rotation / sprite child to update
                                runtimeOldPlayerNPC._Update();
                            }
                        }

                        if (runtimeNewPlayerNPC == null || newPlayerPosition == NewPlayerPosition.ReplaceAssociatedNPC)
                        {
                            // Try to find from associated NPC prefab

                            if (newPlayerPrefab.playerOb.associatedNPCPrefab != null)
                            {
                                ConstantID prefabID = newPlayerPrefab.playerOb.associatedNPCPrefab.GetComponent <ConstantID>();
                                if (prefabID != null && prefabID.constantID != 0)
                                {
                                    newPlayerNPC_ID     = prefabID.constantID;
                                    runtimeNewPlayerNPC = AssignFile <NPC> (prefabID.constantID, null);
                                }
                            }
                        }

                        Quaternion newRotation = Quaternion.identity;
                        if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer)
                        {
                            newRotation = oldPlayerRotation;
                        }
                        else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC && runtimeNewPlayerNPC != null)
                        {
                            newRotation = runtimeNewPlayerNPC.TransformRotation;
                        }
                        else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker && runtimeNewPlayerMarker != null)
                        {
                            newRotation = runtimeNewPlayerMarker.transform.rotation;
                        }

                        if (runtimeNewPlayerNPC != null)
                        {
                            oldNPCData = runtimeNewPlayerNPC.SaveData(oldNPCData);
                        }

                        bool replacesOldPlayer = newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer &&
                                                 (!restorePreviousData || !KickStarter.saveSystem.DoesPlayerDataExist(playerID, true));
                        KickStarter.ResetPlayer(newPlayerPrefab.playerOb, playerID, true, newRotation, keepInventory, false, replacesOldPlayer, alwaysSnapCamera);
                        Player newPlayer = KickStarter.player;
                        PlayerMenus.ResetInventoryBoxes();

                        if (replacesOldPlayer && recordedOldPlayerData)
                        {
                            ApplyRenderData(newPlayer, oldPlayerData);
                        }

                        if (restorePreviousData && KickStarter.saveSystem.DoesPlayerDataExist(playerID, true))
                        {
                            int    sceneToLoad     = KickStarter.saveSystem.GetPlayerScene(playerID);
                            string sceneToLoadName = KickStarter.saveSystem.GetPlayerSceneName(playerID);

                            if (sceneToLoad >= 0 && sceneToLoad != UnityVersionHandler.GetCurrentSceneNumber())
                            {
                                KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer;
                                KickStarter.sceneChanger.ChangeScene(new SceneInfo(string.Empty, sceneToLoad), true, false);
                            }
                            else if (!string.IsNullOrEmpty(sceneToLoadName) && sceneToLoadName != UnityVersionHandler.GetCurrentSceneName())
                            {
                                KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer;
                                KickStarter.sceneChanger.ChangeScene(new SceneInfo(sceneToLoadName, -1), true, false);
                            }
                            else
                            {
                                // Same scene
                                if (runtimeNewPlayerNPC != null)
                                {
                                    newPlayer.RepositionToTransform(runtimeNewPlayerNPC.transform);
                                    runtimeNewPlayerNPC.HideFromView(newPlayer);
                                }
                            }
                        }
                        else
                        {
                            // No data to restore

                            if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer)
                            {
                                newPlayer.Teleport(oldPlayerPosition);
                                newPlayer.SetRotation(oldPlayerRotation);
                                newPlayer.transform.localScale = oldPlayerScale;
                            }
                            else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC || newPlayerPosition == NewPlayerPosition.ReplaceAssociatedNPC)
                            {
                                if (runtimeNewPlayerNPC != null)
                                {
                                    newPlayer.RepositionToTransform(runtimeNewPlayerNPC.transform);
                                    runtimeNewPlayerNPC.HideFromView(newPlayer);

                                    if (recordedOldNPCData)
                                    {
                                        ApplyRenderData(newPlayer, oldNPCData);
                                    }
                                }
                            }
                            else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker)
                            {
                                if (runtimeNewPlayerMarker)
                                {
                                    newPlayer.RepositionToTransform(runtimeNewPlayerMarker.transform);
                                }
                            }
                            else if (newPlayerPosition == NewPlayerPosition.AppearInOtherScene)
                            {
                                if (chooseNewSceneBy == ChooseSceneBy.Name && newPlayerSceneName == UnityVersionHandler.GetCurrentSceneName() ||
                                    (chooseNewSceneBy == ChooseSceneBy.Number && newPlayerScene == UnityVersionHandler.GetCurrentSceneNumber()))
                                {
                                    // Already in correct scene
                                    if (runtimeNewPlayerNPC && runtimeNewPlayerNPC.gameObject.activeInHierarchy)
                                    {
                                        newPlayer.RepositionToTransform(runtimeNewPlayerNPC.transform);
                                        runtimeNewPlayerNPC.HideFromView(newPlayer);
                                    }
                                }
                                else
                                {
                                    KickStarter.sceneChanger.ChangeScene(new SceneInfo(chooseNewSceneBy, newPlayerSceneName, newPlayerScene), true, false, true);
                                }
                            }
                        }

                        if (KickStarter.mainCamera.attachedCamera && alwaysSnapCamera)
                        {
                            KickStarter.mainCamera.attachedCamera.MoveCameraInstant();
                        }

                        AssetLoader.UnloadAssets();
                    }
                    else
                    {
                        LogWarning("Cannot switch player - no player prefabs is defined.");
                    }
                }
            }

            return(0f);
        }
Example #9
0
        override public float Run()
        {
            if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow)
            {
                if (KickStarter.sceneChanger.GetSubScenes().Length > 0)
                {
                    //	ACDebug.LogWarning ("Cannot switch players while multiple scenes are open!");
                    //	return 0f;
                }

                if (KickStarter.settingsManager.players.Count > 0 && KickStarter.settingsManager.players.Count > playerNumber && playerNumber > -1)
                {
                    if (KickStarter.player != null && KickStarter.player.ID == playerID)
                    {
                        ACDebug.Log("Cannot switch player - already controlling the desired prefab.");
                        return(0f);
                    }

                    if (KickStarter.settingsManager.players[playerNumber].playerOb != null)
                    {
                        KickStarter.saveSystem.SaveCurrentPlayerData();

                        Vector3    oldPlayerPosition = Vector3.zero;
                        Quaternion oldPlayerRotation = new Quaternion();
                        Vector3    oldPlayerScale    = Vector3.one;

                        if (KickStarter.player != null)
                        {
                            oldPlayerPosition = KickStarter.player.transform.position;
                            oldPlayerRotation = KickStarter.player.transform.rotation;
                            oldPlayerScale    = KickStarter.player.transform.localScale;
                        }

                        if (oldPlayer == OldPlayer.ReplaceWithNPC && oldPlayerNPC != null &&
                            (newPlayerPosition == NewPlayerPosition.ReplaceNPC || newPlayerPosition == NewPlayerPosition.AppearAtMarker))
                        {
                            oldPlayerNPC.transform.position   = oldPlayerPosition;
                            oldPlayerNPC.transform.rotation   = oldPlayerRotation;
                            oldPlayerNPC.transform.localScale = oldPlayerScale;
                        }

                        Quaternion newRotation = Quaternion.identity;
                        if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer)
                        {
                            newRotation = oldPlayerRotation;
                        }
                        else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC && newPlayerNPC)
                        {
                            newRotation = newPlayerNPC.transform.rotation;
                        }
                        else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker && newPlayerMarker)
                        {
                            newRotation = newPlayerMarker.transform.rotation;
                        }

                        KickStarter.ResetPlayer(KickStarter.settingsManager.players[playerNumber].playerOb, playerID, true, newRotation, keepInventory);
                        Player newPlayer = KickStarter.player;
                        PlayerMenus.ResetInventoryBoxes();

                        int sceneToLoad = UnityVersionHandler.GetCurrentSceneNumber();
                        if (restorePreviousData && KickStarter.saveSystem.DoesPlayerDataExist(playerID, true))
                        {
                            sceneToLoad = KickStarter.saveSystem.GetPlayerScene(playerID);

                            if (sceneToLoad != UnityVersionHandler.GetCurrentSceneNumber())
                            {
                                KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer;
                                KickStarter.sceneChanger.ChangeScene(new SceneInfo("", sceneToLoad), true);
                            }
                        }
                        else
                        {
                            if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer)
                            {
                                newPlayer.Teleport(oldPlayerPosition);
                                newPlayer.SetRotation(oldPlayerRotation);
                                newPlayer.transform.localScale = oldPlayerScale;
                            }
                            else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC)
                            {
                                if (newPlayerNPC)
                                {
                                    newPlayer.Teleport(newPlayerNPC.transform.position);
                                    newPlayer.SetRotation(newPlayerNPC.transform.rotation);
                                    newPlayer.transform.localScale = newPlayerNPC.transform.localScale;

                                    newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f);
                                }
                            }
                            else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker)
                            {
                                if (newPlayerMarker)
                                {
                                    newPlayer.Teleport(newPlayerMarker.transform.position);
                                    newPlayer.SetRotation(newPlayerMarker.transform.rotation);
                                    newPlayer.transform.localScale = newPlayerMarker.transform.localScale;
                                }
                            }
                            else if (newPlayerPosition == NewPlayerPosition.AppearInOtherScene)
                            {
                                if (chooseNewSceneBy == ChooseSceneBy.Name && newPlayerSceneName == UnityVersionHandler.GetCurrentSceneName())
                                {
                                }
                                else if (chooseNewSceneBy == ChooseSceneBy.Number && newPlayerScene == UnityVersionHandler.GetCurrentSceneNumber())
                                {
                                }
                                else
                                {
                                    KickStarter.sceneChanger.ChangeScene(new SceneInfo(chooseNewSceneBy, newPlayerSceneName, newPlayerScene), true);
                                }
                            }
                        }

                        if (KickStarter.mainCamera.attachedCamera)
                        {
                            KickStarter.mainCamera.attachedCamera.MoveCameraInstant();
                        }

                        AssetLoader.UnloadAssets();
                    }
                    else
                    {
                        ACDebug.LogWarning("Cannot switch player - no player prefabs is defined.");
                    }
                }
            }

            return(0f);
        }
Example #10
0
 /**
  * A Constructor for the current active scene.
  */
 public SceneInfo()
 {
     number = UnityVersionHandler.GetCurrentSceneNumber();
     name   = UnityVersionHandler.GetCurrentSceneName();
 }
Example #11
0
 private void AssignThisSceneInfo()
 {
     thisSceneInfo = new SceneInfo(UnityVersionHandler.GetCurrentSceneName(), UnityVersionHandler.GetCurrentSceneNumber());
 }
Example #12
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);
            }
        }
Example #13
0
        /**
         * <summary>Checks if this class instance represetnts the currently-active main scene</summary>
         * <returns>True if this class instance represetnts the currently-active main scene</returns>
         */
        public bool IsCurrentActive()
        {
            SceneInfo activeSceneInfo = new SceneInfo(UnityVersionHandler.GetCurrentSceneName(), UnityVersionHandler.GetCurrentSceneNumber());

            return(Matches(activeSceneInfo));
        }
Example #14
0
 private SingleLevelData GetLevelData()
 {
     return(GetLevelData(UnityVersionHandler.GetCurrentSceneNumber()));
 }
        override public float Run()
        {
            if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow)
            {
                if (KickStarter.sceneChanger.GetSubScenes().Length > 0)
                {
                    //	ACDebug.LogWarning ("Cannot switch players while multiple scenes are open!");
                    //	return 0f;
                }

                if (KickStarter.settingsManager.players.Count > 0 && KickStarter.settingsManager.players.Count > playerNumber && playerNumber > -1)
                {
                    if (KickStarter.player != null && KickStarter.player.ID == playerID)
                    {
                        ACDebug.Log("Cannot switch player - already controlling the desired prefab.");
                        return(0f);
                    }

                    if (KickStarter.settingsManager.players[playerNumber].playerOb != null)
                    {
                        KickStarter.saveSystem.SaveCurrentPlayerData();

                        Vector3    oldPlayerPosition = Vector3.zero;
                        Quaternion oldPlayerRotation = new Quaternion();
                        Vector3    oldPlayerScale    = Vector3.one;

                        if (KickStarter.player != null)
                        {
                            oldPlayerPosition = KickStarter.player.transform.position;
                            oldPlayerRotation = KickStarter.player.TransformRotation;
                            oldPlayerScale    = KickStarter.player.transform.localScale;
                        }

                        if (newPlayerPosition != NewPlayerPosition.ReplaceCurrentPlayer)
                        {
                            if (oldPlayer == OldPlayer.ReplaceWithAssociatedNPC && (oldPlayerNPC == null || !oldPlayerNPC.gameObject.activeInHierarchy) && KickStarter.player.associatedNPCPrefab != null)
                            {
                                GameObject newObject = (GameObject)Instantiate(KickStarter.player.associatedNPCPrefab.gameObject);
                                newObject.name = KickStarter.player.associatedNPCPrefab.gameObject.name;
                                oldPlayerNPC   = newObject.GetComponent <NPC>();
                            }

                            if ((oldPlayer == OldPlayer.ReplaceWithNPC || oldPlayer == OldPlayer.ReplaceWithAssociatedNPC) &&
                                oldPlayerNPC != null && oldPlayerNPC.gameObject.activeInHierarchy)
                            {
                                oldPlayerNPC.transform.position   = oldPlayerPosition;
                                oldPlayerNPC.TransformRotation    = oldPlayerRotation;
                                oldPlayerNPC.transform.localScale = oldPlayerScale;

                                // Force the rotation / sprite child to update
                                oldPlayerNPC._Update();
                            }
                        }

                        if (newPlayerNPC == null || newPlayerPosition == NewPlayerPosition.ReplaceAssociatedNPC)
                        {
                            // Try to find from associated NPC prefab

                            if (KickStarter.settingsManager.players[playerNumber].playerOb.associatedNPCPrefab != null)
                            {
                                ConstantID prefabID = KickStarter.settingsManager.players[playerNumber].playerOb.associatedNPCPrefab.GetComponent <ConstantID>();
                                if (prefabID != null && prefabID.constantID != 0)
                                {
                                    newPlayerNPC_ID = prefabID.constantID;
                                    newPlayerNPC    = AssignFile <NPC> (prefabID.constantID, null);
                                }
                            }
                        }

                        Quaternion newRotation = Quaternion.identity;
                        if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer)
                        {
                            newRotation = oldPlayerRotation;
                        }
                        else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC && newPlayerNPC)
                        {
                            newRotation = newPlayerNPC.TransformRotation;
                        }
                        else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker && newPlayerMarker)
                        {
                            newRotation = newPlayerMarker.transform.rotation;
                        }

                        bool replacesOldPlayer = newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer &&
                                                 (!restorePreviousData || !KickStarter.saveSystem.DoesPlayerDataExist(playerID, true));

                        KickStarter.ResetPlayer(KickStarter.settingsManager.players[playerNumber].playerOb, playerID, true, newRotation, keepInventory, false, replacesOldPlayer);
                        Player newPlayer = KickStarter.player;
                        PlayerMenus.ResetInventoryBoxes();

                        if (restorePreviousData && KickStarter.saveSystem.DoesPlayerDataExist(playerID, true))
                        {
                            if (newPlayerNPC)
                            {
                                newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f);
                            }

                            int sceneToLoad = KickStarter.saveSystem.GetPlayerScene(playerID);
                            if (sceneToLoad >= 0 && sceneToLoad != UnityVersionHandler.GetCurrentSceneNumber())
                            {
                                KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer;
                                KickStarter.sceneChanger.ChangeScene(new SceneInfo("", sceneToLoad), true, false, newPlayerNPC_ID);
                            }
                            else
                            {
                                string sceneToLoadName = KickStarter.saveSystem.GetPlayerSceneName(playerID);
                                if (sceneToLoadName != "" && sceneToLoadName != UnityVersionHandler.GetCurrentSceneName())
                                {
                                    KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer;
                                    KickStarter.sceneChanger.ChangeScene(new SceneInfo(sceneToLoadName, -1), true, false, newPlayerNPC_ID);
                                }
                            }
                        }
                        else
                        {
                            // No data to restore

                            if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer)
                            {
                                newPlayer.Teleport(oldPlayerPosition);
                                newPlayer.SetRotation(oldPlayerRotation);
                                newPlayer.transform.localScale = oldPlayerScale;
                            }
                            else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC || newPlayerPosition == NewPlayerPosition.ReplaceAssociatedNPC)
                            {
                                if (newPlayerNPC)
                                {
                                    newPlayer.Teleport(newPlayerNPC.transform.position);
                                    newPlayer.SetRotation(newPlayerNPC.TransformRotation);
                                    newPlayer.transform.localScale = newPlayerNPC.transform.localScale;

                                    newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f);
                                }
                            }
                            else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker)
                            {
                                if (newPlayerMarker)
                                {
                                    newPlayer.Teleport(newPlayerMarker.transform.position);
                                    newPlayer.SetRotation(newPlayerMarker.transform.rotation);
                                    newPlayer.transform.localScale = newPlayerMarker.transform.localScale;
                                }
                            }
                            else if (newPlayerPosition == NewPlayerPosition.AppearInOtherScene)
                            {
                                if (chooseNewSceneBy == ChooseSceneBy.Name && newPlayerSceneName == UnityVersionHandler.GetCurrentSceneName() ||
                                    (chooseNewSceneBy == ChooseSceneBy.Number && newPlayerScene == UnityVersionHandler.GetCurrentSceneNumber()))
                                {
                                    // Already in correct scene
                                    if (newPlayerNPC && newPlayerNPC.gameObject.activeInHierarchy)
                                    {
                                        newPlayer.Teleport(newPlayerNPC.transform.position);
                                        newPlayer.SetRotation(newPlayerNPC.TransformRotation);
                                        newPlayer.transform.localScale = newPlayerNPC.transform.localScale;

                                        newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f);
                                    }
                                }
                                else
                                {
                                    if (newPlayerNPC && newPlayerNPC.gameObject.activeInHierarchy)
                                    {
                                        newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f);
                                    }

                                    //KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer;
                                    KickStarter.sceneChanger.ChangeScene(new SceneInfo(chooseNewSceneBy, newPlayerSceneName, newPlayerScene), true, false, newPlayerNPC_ID, true);
                                }
                            }
                        }

                        if (KickStarter.mainCamera.attachedCamera)
                        {
                            KickStarter.mainCamera.attachedCamera.MoveCameraInstant();
                        }

                        AssetLoader.UnloadAssets();
                    }
                    else
                    {
                        ACDebug.LogWarning("Cannot switch player - no player prefabs is defined.");
                    }
                }
            }

            return(0f);
        }