Пример #1
0
        /// <summary>
        /// 新しいシーン情報を取得
        /// </summary>
        /// <param name="sceneCondition"></param>
        /// <returns></returns>
        private SceneData GetNewSceneData(SceneCondition sceneCondition)
        {
            IComponentInitialiser componentInitialiser = GetComponentInitialiser(sceneCondition);

            // コンポーネント初期化クラスがnullだとコンポーネントが作れないのでエラー
            if (componentInitialiser == null)
            {
                throw new InvalidOperationException(sceneCondition.ToString() + "のコンポーネント初期化クラスを指定してください");
            }

            string contentManagerName = GetContentManagerName(sceneCondition);

            // コンテントマネージャー名がnullだとコンテントマネージャーが作れないのでエラー
            if (contentManagerName == null)
            {
                throw new InvalidOperationException(sceneCondition.ToString() + "のコンテントマネージャー名を指定してください");
            }

            ContentManager contentManager = GetContentManager(contentManagerName);

            SceneData newSceneData =
                new SceneData(
                    sceneCondition,
                    new ComponentManager(Game, componentInitialiser, contentManager)
                    );

            SetContentManagerUser(contentManagerName, newSceneData.ComponentManager);

            return(newSceneData);
        }
Пример #2
0
        /// <summary>
        /// 次のシーン情報を新しく取得する
        /// すでにプリロードされている場合は、それが取得される
        /// </summary>
        /// <param name="nextSceneCondition"></param>
        /// <param name="clearHistory"></param>
        /// <returns></returns>
        public SceneData NextNewScene(SceneCondition nextSceneCondition, bool clearHistory)
        {
            // 次のシーンデータ取得
            SceneData nextSceneData = PopPreloadedCache(nextSceneCondition);

            if (nextSceneData == null)
            {
                nextSceneData = GetNewSceneData(nextSceneCondition);
                nextSceneData.ComponentManager.Load();
            }

            // 履歴追加
            if (CurrentSceneData != null)
            {
                _historySceneData.AddLast(CurrentSceneData);
            }

            // 現在のシーンデータにセット
            _currentSceneData = nextSceneData;

            // 他のシーンデータをプリロードする
            PreloadSceneData(nextSceneData);

            // 履歴をすべて削除する
            if (clearHistory)
            {
                ClearAllHistory(true);
            }

            return(CurrentSceneData);
        }
Пример #3
0
        /// <summary>
        /// シーンをプリロードしたシーンのコンポーネント管理クラスを登録する
        /// </summary>
        /// <param name="preloadSceneCondition"></param>
        /// <param name="preloader"></param>
        private void SetPreloader(SceneCondition preloadSceneCondition, IComponentManager preloader)
        {
            if (!_preloaders.ContainsKey(preloadSceneCondition))
            {
                _preloaders[preloadSceneCondition] = new HashSet <IComponentManager>();
            }

            _preloaders[preloadSceneCondition].Add(preloader);
        }
Пример #4
0
 /// <summary>
 /// コンポーネント初期化クラスを取得
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <returns></returns>
 private IComponentInitialiser GetComponentInitialiser(SceneCondition sceneCondition)
 {
     if (_componentInitialiser.ContainsKey(sceneCondition))
     {
         return(_componentInitialiser[sceneCondition]);
     }
     else
     {
         return(null);
     }
 }
Пример #5
0
 /// <summary>
 /// シーンで使うコンテントマネージャー名を取得する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <returns></returns>
 private string GetContentManagerName(SceneCondition sceneCondition)
 {
     if (_contentManagerNames.ContainsKey(sceneCondition))
     {
         return(_contentManagerNames[sceneCondition]);
     }
     else
     {
         return(null);
     }
 }
Пример #6
0
 /// <summary>
 /// プリロードするシーン名リストを取得する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <returns></returns>
 private IList <SceneCondition> GetPreloadList(SceneCondition sceneCondition)
 {
     if (_preloadSceneConditions.ContainsKey(sceneCondition))
     {
         return(_preloadSceneConditions[sceneCondition]);
     }
     else
     {
         return(null);
     }
 }
Пример #7
0
        /// <summary>
        /// 同じか
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }

            SceneCondition other = obj as SceneCondition;

            if (other == null)
            {
                return(false);
            }

            return(this.SceneName == other.SceneName && this.Attribute == other.Attribute);
        }
Пример #8
0
        /// <summary>
        /// キャッシュからプリロードされているシーン情報を取り出す(キャッシュは削除される)
        /// </summary>
        /// <param name="sceneCondition"></param>
        /// <returns></returns>
        private SceneData PopPreloadedCache(SceneCondition sceneCondition)
        {
            if (_preloadedCaches.ContainsKey(sceneCondition))
            {
                SceneData preloaded = _preloadedCaches[sceneCondition];

                _preloadedCaches.Remove(sceneCondition);

                _preloaders.Remove(sceneCondition);

                return(preloaded);
            }
            else
            {
                return(null);
            }
        }
Пример #9
0
        /// <summary>
        /// シーン遷移処理
        /// </summary>
        public void SceneTransition()
        {
            switch (_nextOrder)
            {
            case TransitionOrder.New:
                NewTransition();
                break;

            case TransitionOrder.Back:
                BackTransition();
                break;
            }

            _nextOrder          = TransitionOrder.None;
            _nextSceneCondition = null;
            _nextTransitionInfo = null;
        }
Пример #10
0
 /// <summary>
 /// シーンのコンテントマネージャー名をセットする
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="contentManagerName"></param>
 public void SetSceneContentManagerName(SceneCondition sceneCondition, string contentManagerName)
 {
     _contentManagerNames[sceneCondition] = contentManagerName;
 }
Пример #11
0
        /// <summary>
        /// シーンをプリロードしたシーンのコンポーネント管理クラスを登録する
        /// </summary>
        /// <param name="preloadSceneCondition"></param>
        /// <param name="preloader"></param>
        private void SetPreloader(SceneCondition preloadSceneCondition, IComponentManager preloader)
        {
            if (!_preloaders.ContainsKey(preloadSceneCondition))
            {
                _preloaders[preloadSceneCondition] = new HashSet<IComponentManager>();
            }

            _preloaders[preloadSceneCondition].Add(preloader);
        }
Пример #12
0
 /// <summary>
 /// シーンが読み込まれたとき、他にプリロードするシーン名を指定する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="preloadList"></param>
 public void SetPreloadSceneConditions(SceneCondition sceneCondition, IList<SceneCondition> preloadList)
 {
     SceneObjectManager.SetPreloadSceneConditions(sceneCondition, preloadList);
 }
Пример #13
0
 /// <summary>
 /// シーン遷移指定:新しいシーンの作成
 /// </summary>
 /// <param name="nextSceneCondition"></param>
 /// <param name="transitionInfo"></param>
 public void NewScene(SceneCondition nextSceneCondition, TransitionInfo transitionInfo)
 {
     _nextOrder = TransitionOrder.New;
     _nextSceneCondition = nextSceneCondition;
     _nextTransitionInfo = transitionInfo;
 }
Пример #14
0
 /// <summary>
 /// シーンが読み込まれたとき、他にプリロードするシーン名を指定する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="preloadList"></param>
 public void SetPreloadSceneConditions(SceneCondition sceneCondition, IList <SceneCondition> preloadList)
 {
     SceneObjectManager.SetPreloadSceneConditions(sceneCondition, preloadList);
 }
Пример #15
0
 /// <summary>
 /// シーンのコンテントマネージャー名をセットする
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="contentManagerName"></param>
 public void SetSceneContentManagerName(SceneCondition sceneCondition, string contentManagerName)
 {
     SceneObjectManager.SetSceneContentManagerName(sceneCondition, contentManagerName);
 }
Пример #16
0
 /// <summary>
 /// シーン遷移指定:新しいシーンの作成
 /// </summary>
 /// <param name="nextSceneCondition"></param>
 /// <param name="transitionInfo"></param>
 public void NewScene(SceneCondition nextSceneCondition, TransitionInfo transitionInfo)
 {
     _nextOrder          = TransitionOrder.New;
     _nextSceneCondition = nextSceneCondition;
     _nextTransitionInfo = transitionInfo;
 }
Пример #17
0
 /// <summary>
 /// シーンが読み込まれたとき、他にプリロードするシーン名を指定する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="preloadList"></param>
 public void SetPreloadSceneConditions(SceneCondition sceneCondition, IList <SceneCondition> preloadList)
 {
     _preloadSceneConditions[sceneCondition] = preloadList;
 }
Пример #18
0
 /// <summary>
 /// シーンのコンポーネント初期化クラスを登録する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="componentInitialiser"></param>
 public void SetSceneInitialiser(SceneCondition sceneCondition, IComponentInitialiser componentInitialiser)
 {
     _componentInitialiser[sceneCondition] = componentInitialiser;
 }
Пример #19
0
 /// <summary>
 /// シーンのコンテントマネージャー名をセットする
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="contentManagerName"></param>
 public void SetSceneContentManagerName(SceneCondition sceneCondition, string contentManagerName)
 {
     _contentManagerNames[sceneCondition] = contentManagerName;
 }
Пример #20
0
 /// <summary>
 /// シーン情報を作成する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="componentManager"></param>
 public SceneData(SceneCondition sceneCondition, IComponentManager componentManager)
 {
     SceneCondition = sceneCondition;
     ComponentManager = componentManager;
 }
Пример #21
0
 /// <summary>
 /// シーン情報を作成する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="componentManager"></param>
 public SceneData(SceneCondition sceneCondition, IComponentManager componentManager)
 {
     SceneCondition   = sceneCondition;
     ComponentManager = componentManager;
 }
Пример #22
0
 /// <summary>
 /// プリロードするシーン名リストを取得する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <returns></returns>
 private IList<SceneCondition> GetPreloadList(SceneCondition sceneCondition)
 {
     if (_preloadSceneConditions.ContainsKey(sceneCondition))
     {
         return _preloadSceneConditions[sceneCondition];
     }
     else
     {
         return null;
     }
 }
Пример #23
0
        /// <summary>
        /// 新しいシーン情報を取得
        /// </summary>
        /// <param name="sceneCondition"></param>
        /// <returns></returns>
        private SceneData GetNewSceneData(SceneCondition sceneCondition)
        {
            IComponentInitialiser componentInitialiser = GetComponentInitialiser(sceneCondition);

            // コンポーネント初期化クラスがnullだとコンポーネントが作れないのでエラー
            if (componentInitialiser == null)
            {
                throw new InvalidOperationException(sceneCondition.ToString() + "のコンポーネント初期化クラスを指定してください");
            }

            string contentManagerName = GetContentManagerName(sceneCondition);

            // コンテントマネージャー名がnullだとコンテントマネージャーが作れないのでエラー
            if (contentManagerName == null)
            {
                throw new InvalidOperationException(sceneCondition.ToString() + "のコンテントマネージャー名を指定してください");
            }

            ContentManager contentManager = GetContentManager(contentManagerName);

            SceneData newSceneData =
                new SceneData(
                    sceneCondition,
                    new ComponentManager(Game, componentInitialiser, contentManager)
                    );

            SetContentManagerUser(contentManagerName, newSceneData.ComponentManager);

            return newSceneData;
        }
Пример #24
0
 /// <summary>
 /// シーン遷移指定:新しいシーンの作成
 /// 遷移情報はデフォルトが使われる
 /// </summary>
 /// <param name="nextSceneCondition"></param>
 public void NewScene(SceneCondition nextSceneCondition)
 {
     NewScene(nextSceneCondition, null);
 }
Пример #25
0
 /// <summary>
 /// シーンのコンポーネント初期化クラスを登録する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="componentInitialiser"></param>
 public void SetSceneInitialiser(SceneCondition sceneCondition, IComponentInitialiser componentInitialiser)
 {
     SceneObjectManager.SetSceneInitialiser(sceneCondition, componentInitialiser);
 }
Пример #26
0
 /// <summary>
 /// シーン遷移指定:前のシーンに戻る
 /// </summary>
 public void BackScene()
 {
     _nextOrder          = TransitionOrder.Back;
     _nextSceneCondition = null;
 }
Пример #27
0
 /// <summary>
 /// シーンが読み込まれたとき、他にプリロードするシーン名を指定する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="preloadList"></param>
 public void SetPreloadSceneConditions(SceneCondition sceneCondition, IList<SceneCondition> preloadList)
 {
     _preloadSceneConditions[sceneCondition] = preloadList;
 }
Пример #28
0
 /// <summary>
 /// シーンのコンポーネント初期化クラスを登録する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="componentInitialiser"></param>
 public void SetSceneInitialiser(SceneCondition sceneCondition, IComponentInitialiser componentInitialiser)
 {
     SceneObjectManager.SetSceneInitialiser(sceneCondition, componentInitialiser);
 }
Пример #29
0
 /// <summary>
 /// シーンで使うコンテントマネージャー名を取得する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <returns></returns>
 private string GetContentManagerName(SceneCondition sceneCondition)
 {
     if (_contentManagerNames.ContainsKey(sceneCondition))
     {
         return _contentManagerNames[sceneCondition];
     }
     else
     {
         return null;
     }
 }
Пример #30
0
 /// <summary>
 /// シーン遷移指定:新しいシーンの作成
 /// 遷移情報はデフォルトが使われる
 /// </summary>
 /// <param name="nextSceneCondition"></param>
 public void NewScene(SceneCondition nextSceneCondition)
 {
     NewScene(nextSceneCondition, null);
 }
Пример #31
0
 /// <summary>
 /// コンポーネント初期化クラスを取得
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <returns></returns>
 private IComponentInitialiser GetComponentInitialiser(SceneCondition sceneCondition)
 {
     if (_componentInitialiser.ContainsKey(sceneCondition))
     {
         return _componentInitialiser[sceneCondition];
     }
     else
     {
         return null;
     }
 }
Пример #32
0
        /// <summary>
        /// シーン遷移処理
        /// </summary>
        public void SceneTransition()
        {
            switch (_nextOrder)
            {
                case TransitionOrder.New:
                    NewTransition();
                    break;
                case TransitionOrder.Back:
                    BackTransition();
                    break;
            }

            _nextOrder = TransitionOrder.None;
            _nextSceneCondition = null;
            _nextTransitionInfo = null;
        }
Пример #33
0
 /// <summary>
 /// シーンのコンポーネント初期化クラスを登録する
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="componentInitialiser"></param>
 public void SetSceneInitialiser(SceneCondition sceneCondition, IComponentInitialiser componentInitialiser)
 {
     _componentInitialiser[sceneCondition] = componentInitialiser;
 }
Пример #34
0
 /// <summary>
 /// シーンのコンテントマネージャー名をセットする
 /// </summary>
 /// <param name="sceneCondition"></param>
 /// <param name="contentManagerName"></param>
 public void SetSceneContentManagerName(SceneCondition sceneCondition, string contentManagerName)
 {
     SceneObjectManager.SetSceneContentManagerName(sceneCondition, contentManagerName);
 }
Пример #35
0
        /// <summary>
        /// キャッシュからプリロードされているシーン情報を取り出す(キャッシュは削除される)
        /// </summary>
        /// <param name="sceneCondition"></param>
        /// <returns></returns>
        private SceneData PopPreloadedCache(SceneCondition sceneCondition)
        {
            if (_preloadedCaches.ContainsKey(sceneCondition))
            {
                SceneData preloaded = _preloadedCaches[sceneCondition];

                _preloadedCaches.Remove(sceneCondition);

                _preloaders.Remove(sceneCondition);

                return preloaded;
            }
            else
            {
                return null;
            }
        }
Пример #36
0
 /// <summary>
 /// シーン遷移指定:前のシーンに戻る
 /// </summary>
 public void BackScene()
 {
     _nextOrder = TransitionOrder.Back;
     _nextSceneCondition = null;
 }
Пример #37
0
        /// <summary>
        /// 次のシーン情報を新しく取得する
        /// すでにプリロードされている場合は、それが取得される
        /// </summary>
        /// <param name="nextSceneCondition"></param>
        /// <param name="clearHistory"></param>
        /// <returns></returns>
        public SceneData NextNewScene(SceneCondition nextSceneCondition, bool clearHistory)
        {
            // 次のシーンデータ取得
            SceneData nextSceneData = PopPreloadedCache(nextSceneCondition);
            if (nextSceneData == null)
            {
                nextSceneData = GetNewSceneData(nextSceneCondition);
                nextSceneData.ComponentManager.Load();
            }

            // 履歴追加
            if (CurrentSceneData != null)
            {
                _historySceneData.AddLast(CurrentSceneData);
            }

            // 現在のシーンデータにセット
            _currentSceneData = nextSceneData;

            // 他のシーンデータをプリロードする
            PreloadSceneData(nextSceneData);

            // 履歴をすべて削除する
            if (clearHistory)
            {
                ClearAllHistory(true);
            }

            return CurrentSceneData;
        }