protected virtual IEnumerator SwapScenes(SceneManagerController sceneManager,
                                                 SceneModel current, SceneModel desired)
        {
            yield return(SceneManager.LoadSceneAsync(desired.SceneName, LoadSceneMode.Single));

            OnTransitionCompleted.SafeInvoke(
                new SceneTransitionEventArgs(sceneManager, current, desired));

            swapperCoroutine = null;
        }
        protected virtual IEnumerator SwapScenes(SceneManagerController sceneManager,
                                                 SceneModel current, SceneModel desired)
        {
            float progressModifier = current == null ? 1f : 0.5f;

            yield return(LoadAdditiveSceneAsync(desired, progressModifier));

            if (current != null)
            {
                yield return(UnloadSceneAsync(current, 2f));
            }

            OnTransitionCompleted.SafeInvoke(
                new SceneTransitionEventArgs(sceneManager, current, desired));

            swapperCoroutine = null;
        }