/// <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); }
/// <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); }
/// <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); }
/// <summary> /// コンポーネント初期化クラスを取得 /// </summary> /// <param name="sceneCondition"></param> /// <returns></returns> private IComponentInitialiser GetComponentInitialiser(SceneCondition sceneCondition) { if (_componentInitialiser.ContainsKey(sceneCondition)) { return(_componentInitialiser[sceneCondition]); } else { return(null); } }
/// <summary> /// シーンで使うコンテントマネージャー名を取得する /// </summary> /// <param name="sceneCondition"></param> /// <returns></returns> private string GetContentManagerName(SceneCondition sceneCondition) { if (_contentManagerNames.ContainsKey(sceneCondition)) { return(_contentManagerNames[sceneCondition]); } else { return(null); } }
/// <summary> /// プリロードするシーン名リストを取得する /// </summary> /// <param name="sceneCondition"></param> /// <returns></returns> private IList <SceneCondition> GetPreloadList(SceneCondition sceneCondition) { if (_preloadSceneConditions.ContainsKey(sceneCondition)) { return(_preloadSceneConditions[sceneCondition]); } else { return(null); } }
/// <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); }
/// <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); } }
/// <summary> /// シーン遷移処理 /// </summary> public void SceneTransition() { switch (_nextOrder) { case TransitionOrder.New: NewTransition(); break; case TransitionOrder.Back: BackTransition(); break; } _nextOrder = TransitionOrder.None; _nextSceneCondition = null; _nextTransitionInfo = null; }
/// <summary> /// シーンのコンテントマネージャー名をセットする /// </summary> /// <param name="sceneCondition"></param> /// <param name="contentManagerName"></param> public void SetSceneContentManagerName(SceneCondition sceneCondition, string contentManagerName) { _contentManagerNames[sceneCondition] = contentManagerName; }
/// <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); }
/// <summary> /// シーンが読み込まれたとき、他にプリロードするシーン名を指定する /// </summary> /// <param name="sceneCondition"></param> /// <param name="preloadList"></param> public void SetPreloadSceneConditions(SceneCondition sceneCondition, IList<SceneCondition> preloadList) { SceneObjectManager.SetPreloadSceneConditions(sceneCondition, preloadList); }
/// <summary> /// シーン遷移指定:新しいシーンの作成 /// </summary> /// <param name="nextSceneCondition"></param> /// <param name="transitionInfo"></param> public void NewScene(SceneCondition nextSceneCondition, TransitionInfo transitionInfo) { _nextOrder = TransitionOrder.New; _nextSceneCondition = nextSceneCondition; _nextTransitionInfo = transitionInfo; }
/// <summary> /// シーンが読み込まれたとき、他にプリロードするシーン名を指定する /// </summary> /// <param name="sceneCondition"></param> /// <param name="preloadList"></param> public void SetPreloadSceneConditions(SceneCondition sceneCondition, IList <SceneCondition> preloadList) { SceneObjectManager.SetPreloadSceneConditions(sceneCondition, preloadList); }
/// <summary> /// シーンのコンテントマネージャー名をセットする /// </summary> /// <param name="sceneCondition"></param> /// <param name="contentManagerName"></param> public void SetSceneContentManagerName(SceneCondition sceneCondition, string contentManagerName) { SceneObjectManager.SetSceneContentManagerName(sceneCondition, contentManagerName); }
/// <summary> /// シーン遷移指定:新しいシーンの作成 /// </summary> /// <param name="nextSceneCondition"></param> /// <param name="transitionInfo"></param> public void NewScene(SceneCondition nextSceneCondition, TransitionInfo transitionInfo) { _nextOrder = TransitionOrder.New; _nextSceneCondition = nextSceneCondition; _nextTransitionInfo = transitionInfo; }
/// <summary> /// シーンが読み込まれたとき、他にプリロードするシーン名を指定する /// </summary> /// <param name="sceneCondition"></param> /// <param name="preloadList"></param> public void SetPreloadSceneConditions(SceneCondition sceneCondition, IList <SceneCondition> preloadList) { _preloadSceneConditions[sceneCondition] = preloadList; }
/// <summary> /// シーンのコンポーネント初期化クラスを登録する /// </summary> /// <param name="sceneCondition"></param> /// <param name="componentInitialiser"></param> public void SetSceneInitialiser(SceneCondition sceneCondition, IComponentInitialiser componentInitialiser) { _componentInitialiser[sceneCondition] = componentInitialiser; }
/// <summary> /// シーンのコンテントマネージャー名をセットする /// </summary> /// <param name="sceneCondition"></param> /// <param name="contentManagerName"></param> public void SetSceneContentManagerName(SceneCondition sceneCondition, string contentManagerName) { _contentManagerNames[sceneCondition] = contentManagerName; }
/// <summary> /// シーン情報を作成する /// </summary> /// <param name="sceneCondition"></param> /// <param name="componentManager"></param> public SceneData(SceneCondition sceneCondition, IComponentManager componentManager) { SceneCondition = sceneCondition; ComponentManager = componentManager; }
/// <summary> /// シーン情報を作成する /// </summary> /// <param name="sceneCondition"></param> /// <param name="componentManager"></param> public SceneData(SceneCondition sceneCondition, IComponentManager componentManager) { SceneCondition = sceneCondition; ComponentManager = componentManager; }
/// <summary> /// プリロードするシーン名リストを取得する /// </summary> /// <param name="sceneCondition"></param> /// <returns></returns> private IList<SceneCondition> GetPreloadList(SceneCondition sceneCondition) { if (_preloadSceneConditions.ContainsKey(sceneCondition)) { return _preloadSceneConditions[sceneCondition]; } else { return null; } }
/// <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; }
/// <summary> /// シーン遷移指定:新しいシーンの作成 /// 遷移情報はデフォルトが使われる /// </summary> /// <param name="nextSceneCondition"></param> public void NewScene(SceneCondition nextSceneCondition) { NewScene(nextSceneCondition, null); }
/// <summary> /// シーンのコンポーネント初期化クラスを登録する /// </summary> /// <param name="sceneCondition"></param> /// <param name="componentInitialiser"></param> public void SetSceneInitialiser(SceneCondition sceneCondition, IComponentInitialiser componentInitialiser) { SceneObjectManager.SetSceneInitialiser(sceneCondition, componentInitialiser); }
/// <summary> /// シーン遷移指定:前のシーンに戻る /// </summary> public void BackScene() { _nextOrder = TransitionOrder.Back; _nextSceneCondition = null; }
/// <summary> /// シーンが読み込まれたとき、他にプリロードするシーン名を指定する /// </summary> /// <param name="sceneCondition"></param> /// <param name="preloadList"></param> public void SetPreloadSceneConditions(SceneCondition sceneCondition, IList<SceneCondition> preloadList) { _preloadSceneConditions[sceneCondition] = preloadList; }
/// <summary> /// シーンのコンポーネント初期化クラスを登録する /// </summary> /// <param name="sceneCondition"></param> /// <param name="componentInitialiser"></param> public void SetSceneInitialiser(SceneCondition sceneCondition, IComponentInitialiser componentInitialiser) { SceneObjectManager.SetSceneInitialiser(sceneCondition, componentInitialiser); }
/// <summary> /// シーンで使うコンテントマネージャー名を取得する /// </summary> /// <param name="sceneCondition"></param> /// <returns></returns> private string GetContentManagerName(SceneCondition sceneCondition) { if (_contentManagerNames.ContainsKey(sceneCondition)) { return _contentManagerNames[sceneCondition]; } else { return null; } }
/// <summary> /// シーン遷移指定:新しいシーンの作成 /// 遷移情報はデフォルトが使われる /// </summary> /// <param name="nextSceneCondition"></param> public void NewScene(SceneCondition nextSceneCondition) { NewScene(nextSceneCondition, null); }
/// <summary> /// コンポーネント初期化クラスを取得 /// </summary> /// <param name="sceneCondition"></param> /// <returns></returns> private IComponentInitialiser GetComponentInitialiser(SceneCondition sceneCondition) { if (_componentInitialiser.ContainsKey(sceneCondition)) { return _componentInitialiser[sceneCondition]; } else { return null; } }
/// <summary> /// シーン遷移処理 /// </summary> public void SceneTransition() { switch (_nextOrder) { case TransitionOrder.New: NewTransition(); break; case TransitionOrder.Back: BackTransition(); break; } _nextOrder = TransitionOrder.None; _nextSceneCondition = null; _nextTransitionInfo = null; }
/// <summary> /// シーンのコンポーネント初期化クラスを登録する /// </summary> /// <param name="sceneCondition"></param> /// <param name="componentInitialiser"></param> public void SetSceneInitialiser(SceneCondition sceneCondition, IComponentInitialiser componentInitialiser) { _componentInitialiser[sceneCondition] = componentInitialiser; }
/// <summary> /// シーンのコンテントマネージャー名をセットする /// </summary> /// <param name="sceneCondition"></param> /// <param name="contentManagerName"></param> public void SetSceneContentManagerName(SceneCondition sceneCondition, string contentManagerName) { SceneObjectManager.SetSceneContentManagerName(sceneCondition, contentManagerName); }
/// <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; } }
/// <summary> /// シーン遷移指定:前のシーンに戻る /// </summary> public void BackScene() { _nextOrder = TransitionOrder.Back; _nextSceneCondition = null; }
/// <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; }