private void Initialize(MasterController masterController) { if (initialized) { return; } this.masterController = masterController; minSize = WindowSize; titleContent = new GUIContent(masterController.GetDisplayMasterName()); lifetimeDisposable = new LifetimeDisposable(); toolbarView = new ToolbarView(); toolbarView.Initialize(masterController); recordView = new RecordView(); recordView.Initialize(masterController); toolbarView.OnChangeSearchTextAsObservable() .Subscribe(x => { var records = GetDisplayRecords(); recordView.SetRecords(records); }) .AddTo(lifetimeDisposable.Disposable); toolbarView.OnResetRecordsAsObservable() .Subscribe(_ => recordView.RefreshRowHeights()) .AddTo(lifetimeDisposable.Disposable); initialized = true; }
void OnDestroy() { if (lifetimeDisposable != null) { lifetimeDisposable.Dispose(); lifetimeDisposable = null; } }
/// <summary> 事前読み込み要求. </summary> public void RequestPreLoad(Scenes[] targetScenes) { if (preLoadDisposable == null) { preLoadDisposable = new LifetimeDisposable(); } PreLoadScene(targetScenes).Subscribe().AddTo(preLoadDisposable.Disposable); }
//----- method ----- public static void Initialize() { if (initialized) { return; } disposable = new LifetimeDisposable(); reportQueue = new FixedQueue <LogEntry>(ReportLogNum); ApplicationLogHandler.Instance.OnLogReceiveAsObservable() .Subscribe(x => LogCallback(x)) .AddTo(disposable.Disposable); initialized = true; }
private void Initialize() { lifetimeDisposable = new LifetimeDisposable(); scrollView = new TextDataSelectorScrollView(); Selection.selectionChanged += () => { Repaint(); }; CompileNotification.OnCompileStartAsObservable() .Subscribe(_ => Close()) .AddTo(lifetimeDisposable.Disposable); scrollView.OnSelectAsObservable() .Subscribe(_ => Close()) .AddTo(lifetimeDisposable.Disposable); scrollView.Contents = GetMatchOfList(); BuildSelectionInfos(); }
//----- property ----- //----- method ----- public static void Initialize(Func <long> getCurrentTimeFunction) { if (initialized) { return; } TimeNotice.getCurrentTimeFunction = getCurrentTimeFunction; lifetimeDisposable = new LifetimeDisposable(); timers = new Dictionary <string, Timer>(); currentTime = getCurrentTimeFunction.Invoke(); Observable.EveryUpdate() .Subscribe(_ => UpdateTimers()) .AddTo(lifetimeDisposable.Disposable); initialized = true; }
public void Initialize(MasterController masterController) { if (initialized) { return; } this.masterController = masterController; lifetimeDisposable = new LifetimeDisposable(); records = masterController.Records; rowHeight = RowHight; showAlternatingRowBackgrounds = false; showBorder = true; SetHeaderColumns(); initialized = true; }
//----- property ----- //----- method ----- public void Initialize() { disposable = new LifetimeDisposable(); initializedTime = (int)DateTime.Now.ToUnixTime(); incrementCount = 0; notifications = new Dictionary <long, NotificationInfo>(); ApplicationEventHandler.OnQuitAsObservable().Subscribe(_ => OnSuspend()).AddTo(disposable.Disposable); ApplicationEventHandler.OnSuspendAsObservable().Subscribe(_ => OnSuspend()).AddTo(disposable.Disposable); ApplicationEventHandler.OnResumeAsObservable().Subscribe(_ => OnResume()).AddTo(disposable.Disposable); #if UNITY_ANDROID && !UNITY_EDITOR PlatformInitialize(); #elif UNITY_IOS && !UNITY_EDITOR PlatformInitialize(); #endif // 過去に登録した通知を削除. Clear(); }
//----- property ----- //----- method ----- void OnEnable() { instance = target as TextureAssetTunerConfig; lifetimeDisposable = new LifetimeDisposable(); //------ Compress Folder ------ compressFolderView = new FolderRegisterScrollView("Compress Folder", "TextureAssetTunerConfigInspector-CompressFolder"); compressFolderView.RemoveChildrenFolder = true; compressFolderView.OnUpdateContentsAsObservable() .Subscribe(x => SaveCompressFolders(x.Select(y => y.asset).ToArray())) .AddTo(lifetimeDisposable.Disposable); compressFolderView.OnRepaintRequestAsObservable() .Subscribe(_ => Repaint()) .AddTo(lifetimeDisposable.Disposable); compressFolderView.SetContents(instance.CompressFolders); //------ Sprite Folder ------ spriteFolderView = new FolderRegisterScrollView("Sprite Folder", "TextureAssetTunerConfigInspector-SpriteFolder"); spriteFolderView.RemoveChildrenFolder = true; spriteFolderView.OnUpdateContentsAsObservable() .Subscribe(x => SaveSpriteFolders(x.Select(y => y.asset).ToArray())) .AddTo(lifetimeDisposable.Disposable); spriteFolderView.OnRepaintRequestAsObservable() .Subscribe(_ => Repaint()) .AddTo(lifetimeDisposable.Disposable); spriteFolderView.SetContents(instance.SpriteFolders); //------ Ignore Compress FolderName ------ ignoreCompressFolderNameScrollView = new FolderNameRegisterScrollView(); ignoreCompressFolderNameScrollView.OnUpdateContentsAsObservable() .Subscribe(x => SaveIgnoreCompressFolderNames(x)) .AddTo(lifetimeDisposable.Disposable); ignoreCompressFolderNameScrollView.OnRepaintRequestAsObservable() .Subscribe(_ => Repaint()) .AddTo(lifetimeDisposable.Disposable); ignoreCompressFolderNameScrollView.SetContents(instance.IgnoreCompressFolderNames); //------ Sprite Folder Name ------ spriteFolderNameScrollView = new FolderNameRegisterScrollView(); spriteFolderNameScrollView.OnUpdateContentsAsObservable() .Subscribe(x => SaveSpriteFolderNames(x)) .AddTo(lifetimeDisposable.Disposable); spriteFolderNameScrollView.OnRepaintRequestAsObservable() .Subscribe(_ => Repaint()) .AddTo(lifetimeDisposable.Disposable); spriteFolderNameScrollView.SetContents(instance.SpriteFolderNames); //------ Ignore Sprite FolderName ------ ignoreSpriteFolderNameScrollView = new FolderNameRegisterScrollView(); ignoreSpriteFolderNameScrollView.OnUpdateContentsAsObservable() .Subscribe(x => SaveIgnoreSpriteFolderNames(x)) .AddTo(lifetimeDisposable.Disposable); ignoreSpriteFolderNameScrollView.OnRepaintRequestAsObservable() .Subscribe(_ => Repaint()) .AddTo(lifetimeDisposable.Disposable); ignoreSpriteFolderNameScrollView.SetContents(instance.IgnoreSpriteFolderNames); }
private IEnumerator TransitionCore <TArgument>(TArgument sceneArgument, LoadSceneMode mode, bool isSceneBack, bool registerHistory) where TArgument : ISceneArgument { if (!sceneArgument.Identifier.HasValue) { yield break; } // プリロード停止. if (preLoadDisposable != null) { preLoadDisposable.Dispose(); preLoadDisposable = null; } TransitionTarget = sceneArgument.Identifier; var prevSceneArgument = currentSceneArgument; currentSceneArgument = sceneArgument; var diagnostics = new TimeDiagnostics(); var prev = currentScene; // 現在のシーンを履歴に残さない場合は、既に登録済みの現在のシーン(history[要素数 - 1])を外す. if (!registerHistory && history.Any()) { history.RemoveAt(history.Count - 1); } //====== Begin Transition ====== diagnostics.Begin(TimeDiagnostics.Measure.Total); var transitionStartYield = TransitionStart(currentSceneArgument).ToYieldInstruction(false); while (!transitionStartYield.IsDone) { yield return(null); } if (transitionStartYield.HasError) { Debug.LogException(transitionStartYield.Error); } if (prev != null) { //====== Scene Leave ====== diagnostics.Begin(TimeDiagnostics.Measure.Leave); // Leave通知. if (onLeave != null) { onLeave.OnNext(prevSceneArgument); } // 現在のシーンの終了処理を実行. var leaveYield = prev.Instance.Leave().ToObservable().ToYieldInstruction(false); while (!leaveYield.IsDone) { yield return(null); } if (leaveYield.HasError) { Debug.LogException(leaveYield.Error); } // PlayerPrefsを保存. PlayerPrefs.Save(); // Leave終了通知. if (onLeaveComplete != null) { onLeaveComplete.OnNext(prevSceneArgument); } prev.Disable(); diagnostics.Finish(TimeDiagnostics.Measure.Leave); } //====== Scene Unload ====== if (mode == LoadSceneMode.Additive) { Func <SceneInstance, bool> isUnloadTarget = sceneInstance => { // SceneBaseクラスが存在しない. if (UnityUtility.IsNull(sceneInstance.Instance)) { return(true); } var result = true; // 遷移元のシーンではない. result &= sceneInstance != prev; // 遷移先のシーンではない. result &= sceneInstance.Identifier != TransitionTarget; // キャッシュ対象でない. result &= cacheScenes.All(x => x != sceneInstance); // 次のシーンのPreLoad対象ではない. result &= currentSceneArgument.PreLoadScenes.All(y => y != sceneInstance.Identifier); return(result); }; // 不要なシーンをアンロード. var unloadScenes = loadedScenes.Values.Where(x => isUnloadTarget(x)).ToArray(); foreach (var unloadScene in unloadScenes) { var unloadSceneYield = UnloadScene(unloadScene).ToYieldInstruction(false); while (!unloadSceneYield.IsDone) { yield return(null); } if (unloadSceneYield.HasError) { Debug.LogException(unloadSceneYield.Error); } if (unloadScene.Identifier.HasValue) { loadedScenes.Remove(unloadScene.Identifier.Value); } } } //====== Load Next Scene ====== diagnostics.Begin(TimeDiagnostics.Measure.Load); // 次のシーンを読み込み. var identifier = sceneArgument.Identifier.Value; var sceneInfo = loadedScenes.GetValueOrDefault(identifier); if (sceneInfo == null) { var loadYield = LoadScene(identifier, mode).ToYieldInstruction(false); while (!loadYield.IsDone) { yield return(null); } if (loadYield.HasError) { OnLoadError(loadYield.Error, identifier); } if (!loadYield.HasResult) { yield break; } sceneInfo = loadYield.Result; if (sceneArgument.Cache) { cacheScenes.Enqueue(sceneInfo); } } var scene = sceneInfo.GetScene(); if (!scene.HasValue) { Debug.LogErrorFormat("[ {0} ] : Scene情報の取得に失敗しました.", identifier); yield break; } if (sceneInfo.Instance == null) { Debug.LogErrorFormat("[ {0} ] : SceneBase継承クラスが存在しません.", scene.Value.path); yield break; } SetSceneActive(scene); // 前のシーンからの引数を設定. sceneInfo.Instance.SetArgument(sceneArgument); // 現在のシーンとして登録. currentScene = sceneInfo; // 次のシーンを履歴に登録. // シーン引数を保存する為遷移時に引数と一緒に履歴登録する為、履歴の最後尾は現在のシーンになる. if (currentScene.Instance != null) { history.Add(currentSceneArgument); } // シーン読み込み後にAwake、Startが終わるのを待つ為1フレーム後に処理を再開. yield return(null); diagnostics.Finish(TimeDiagnostics.Measure.Load); //====== Scene Prepare ====== diagnostics.Begin(TimeDiagnostics.Measure.Prepare); // Prepare通知. if (onPrepare != null) { onPrepare.OnNext(currentSceneArgument); } // 次のシーンの準備処理実行. if (currentScene.Instance != null) { var prepareYield = currentScene.Instance.Prepare(isSceneBack).ToObservable().ToYieldInstruction(false); while (!prepareYield.IsDone) { yield return(null); } if (prepareYield.HasError) { Debug.LogException(prepareYield.Error); } } // Prepare終了通知. if (onPrepareComplete != null) { onPrepareComplete.OnNext(currentSceneArgument); } diagnostics.Finish(TimeDiagnostics.Measure.Prepare); //====== Unload PrevScene ====== // キャッシュ対象でない場合はアンロード. if (prevSceneArgument == null || !prevSceneArgument.Cache) { var unloadSceneYield = UnloadScene(prev).ToYieldInstruction(false); while (!unloadSceneYield.IsDone) { yield return(null); } if (unloadSceneYield.HasError) { Debug.LogException(unloadSceneYield.Error); } } //====== Scene Wait ====== // メモリ解放. var cleanUpYield = CleanUp().ToYieldInstruction(false); while (!cleanUpYield.IsDone) { yield return(null); } if (cleanUpYield.HasError) { Debug.LogException(cleanUpYield.Error); } // 外部処理待機. var transitionWaitYield = TransitionWait().ToObservable().ToYieldInstruction(false); while (!transitionWaitYield.IsDone) { yield return(null); } if (transitionWaitYield.HasError) { Debug.LogException(transitionWaitYield.Error); } // シーンを有効化. sceneInfo.Enable(); // シーン遷移完了. TransitionTarget = null; // シーン遷移終了. var transitionFinishYield = TransitionFinish(currentSceneArgument).ToYieldInstruction(false); while (!transitionFinishYield.IsDone) { yield return(null); } if (transitionFinishYield.HasError) { Debug.LogException(transitionFinishYield.Error); } //====== Scene Enter ====== // Enter通知. if (onEnter != null) { onEnter.OnNext(currentSceneArgument); } // 次のシーンの開始処理実行. if (currentScene.Instance != null) { currentScene.Instance.Enter(isSceneBack); } // Enter終了通知. if (onEnterComplete != null) { onEnterComplete.OnNext(currentSceneArgument); } //====== Report ====== diagnostics.Finish(TimeDiagnostics.Measure.Total); var prevScene = prev.Identifier; var nextScene = currentScene.Identifier; var total = diagnostics.GetTime(TimeDiagnostics.Measure.Total); var detail = diagnostics.BuildDetailText(); var message = string.Format("{0} → {1} ({2:F2}ms)\n\n{3}", prevScene, nextScene, total, detail); UnityConsole.Event(ConsoleEventName, ConsoleEventColor, message); //====== PreLoad ====== RequestPreLoad(sceneArgument.PreLoadScenes); }
//----- property ----- //----- method ----- void OnEnable() { instance = target as TextureAssetTunerConfig; lifetimeDisposable = new LifetimeDisposable(); //------ Compress Folder ------ compressFolderView = new FolderRegisterScrollView("Compress Folder", "TextureAssetTunerConfigInspector-CompressFolder"); compressFolderView.RemoveChildrenFolder = true; compressFolderView.OnUpdateContentsAsObservable() .Subscribe(x => SaveCompressFolders(x.Select(y => y.asset).ToArray())) .AddTo(lifetimeDisposable.Disposable); var compressFolderGuids = instance.CompressFolders .Select(x => UnityEditorUtility.GetAssetGUID(x)) .ToArray(); compressFolderView.SetContents(compressFolderGuids); //------ Sprite Folder ------ spriteFolderView = new FolderRegisterScrollView("Sprite Folder", "TextureAssetTunerConfigInspector-SpriteFolder"); spriteFolderView.RemoveChildrenFolder = true; spriteFolderView.OnUpdateContentsAsObservable() .Subscribe(x => SaveSpriteFolders(x.Select(y => y.asset).ToArray())) .AddTo(lifetimeDisposable.Disposable); var spriteFolderGuids = instance.SpriteFolders .Select(x => UnityEditorUtility.GetAssetGUID(x)) .ToArray(); spriteFolderView.SetContents(spriteFolderGuids); //------ Ignore Compress FolderName ------ ignoreCompressFolderNameScrollView = new FolderNameRegisterScrollView(); ignoreCompressFolderNameScrollView.OnUpdateContentsAsObservable() .Subscribe(x => SaveIgnoreCompressFolders(x)) .AddTo(lifetimeDisposable.Disposable); ignoreCompressFolderNameScrollView.SetContents(instance.IgnoreCompressFolders); //------ Sprite Folder Name ------ spriteFolderNameScrollView = new FolderNameRegisterScrollView(); spriteFolderNameScrollView.OnUpdateContentsAsObservable() .Subscribe(x => SaveSpriteFolderNames(x)) .AddTo(lifetimeDisposable.Disposable); spriteFolderNameScrollView.SetContents(instance.SpriteFolderNames); //------ Ignore Sprite FolderName ------ ignoreSpriteFolderNameScrollView = new FolderNameRegisterScrollView(); ignoreSpriteFolderNameScrollView.OnUpdateContentsAsObservable() .Subscribe(x => SaveIgnoreSpriteFolders(x)) .AddTo(lifetimeDisposable.Disposable); ignoreSpriteFolderNameScrollView.SetContents(instance.IgnoreSpriteFolders); //------ Options ------ changeSettingOnImport = TextureAssetTunerConfig.Prefs.changeSettingOnImport; }