Beispiel #1
0
    private static void LoadSceneDoor(SceneDoorDetails doorDetails)
    {
        if (battleScene != null || tradeScene != null || evolutionScene != null || playerMenuScene != null)
        {
            Debug.LogError("Attempting to load scene whilst in battle/trade/evolution/player menu scene");
            return;
        }

        Scene oldScene = CurrentScene;

        GetFreeRoamSceneController(oldScene).SetDoorsEnabledState(false);
        GetFreeRoamSceneController(oldScene).SetSceneRunningState(false);

        StartFadeOut();

        FadeOutComplete += () =>
        {
            PlayerController.singleton.SetMoveDelay(sceneChangePlayerMoveDelay);

            if (doorDetails.isDepthLevel)
            {
                AddSceneDoorToRecordStack(oldScene.name, doorDetails);
            }

            currentInstanceId = doorDetails.instanceId;

            LoadScene(doorDetails.sceneName,
                      oldScene,
                      doorDetails.newSceneTargetPosition);
        };
    }
 public override SceneDoorDetails GetInstanceSpecificSceneDoorDetails(SceneDoorDetails baseDoorDetails)
 => new SceneDoorDetails()
 {
     isDepthLevel           = baseDoorDetails.isDepthLevel,
     isLoadingDoor          = baseDoorDetails.isLoadingDoor,
     newSceneTargetPosition = baseDoorDetails.newSceneTargetPosition,
     returnPosition         = Vector2Int.RoundToInt(door.transform.position) + Vector2Int.down,
     sceneName  = baseDoorDetails.sceneName,
     instanceId = baseDoorDetails.instanceId
 };
 private static void LoadScene(SceneDoorDetails doorDetails)
 {
     if (doorDetails.isDepthLevel)
     {
         LoadDepthLevelScene(doorDetails);
     }
     else
     {
         LoadParallelLevelScene(doorDetails);
     }
 }
Beispiel #4
0
 public static void UseDoor(SceneDoorDetails doorDetails)
 {
     if (doorDetails.isLoadingDoor)
     {
         LoadSceneDoor(doorDetails);
     }
     else
     {
         AscendScene();
     }
 }
    public static void UseDoor(SceneDoorDetails doorDetails)
    {
        RefreshCurrentSceneStack();

        if (doorDetails.isLoadingDoor)
        {
            LoadScene(doorDetails);
        }
        else
        {
            ExitDepthLevelScene();
        }
    }
    private static void LoadParallelLevelScene(SceneDoorDetails doorDetails)
    {
        if (battleSceneInUse)
        {
            Debug.LogError("Attempting to load scene whilst in battle");
            return;
        }

        Scene oldScene = sceneRecordStack.Pop().scene;

        GetFreeRoamSceneController(oldScene).SetDoorsEnabledState(false);
        GetFreeRoamSceneController(oldScene).SetSceneRunningState(false);

        StartFadeOut();

        FadeOutComplete += () =>
        {
            GetFreeRoamSceneController(oldScene).SetSceneRunningState(true);
            GetFreeRoamSceneController(oldScene).SetEnabledState(false);

            PlayerGameObject.GetComponent <PlayerController>().SetMoveDelay(sceneChangePlayerMoveDelay);

            //https://low-scope.com/unity-quick-get-a-reference-to-a-newly-loaded-scene/
            int newSceneIndex = SceneManager.sceneCount;

            AsyncOperation loadSceneOperation = SceneManager.LoadSceneAsync(doorDetails.sceneName, LoadSceneMode.Additive);

            loadSceneOperation.completed += (ao) =>
            {
                Scene newScene = SceneManager.GetSceneAt(newSceneIndex);

                sceneRecordStack.Push(new SceneRecord(newScene));

                MovePlayerAndMenuToNewScene(PlayerGameObject, FreeRoamMenuGameObject, newScene, doorDetails.newSceneTargetPosition);

                SceneManager.SetActiveScene(newScene);

                GetFreeRoamSceneController(newScene).SetSceneRunningState(false);

                SceneManager.UnloadSceneAsync(oldScene).completed += (ao) =>
                {
                    GetFreeRoamSceneController(newScene).SetSceneRunningState(true);
                    GetFreeRoamSceneController(newScene).SetDoorsEnabledState(true);
                    StartFadeIn();
                };
            };
        };
    }
Beispiel #7
0
 /// <summary>
 /// Gets an instance-specific SceneDoorDetails for a specific building instance by setting the instance-specific properties of it (eg. the return position)
 /// </summary>
 /// <param name="baseDetails">The basic door details to base the output on</param>
 public abstract SceneDoorDetails GetInstanceSpecificSceneDoorDetails(SceneDoorDetails baseDoorDetails);
Beispiel #8
0
 private static void AddSceneDoorToRecordStack(string sceneIdentifier, SceneDoorDetails doorDetails)
 => sceneRecordStack.Push(new SceneRecord(sceneIdentifier, doorDetails.returnPosition, doorDetails.instanceId));