コード例 #1
0
        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;
        }
コード例 #2
0
 void OnDestroy()
 {
     if (lifetimeDisposable != null)
     {
         lifetimeDisposable.Dispose();
         lifetimeDisposable = null;
     }
 }
コード例 #3
0
        /// <summary> 事前読み込み要求. </summary>
        public void RequestPreLoad(Scenes[] targetScenes)
        {
            if (preLoadDisposable == null)
            {
                preLoadDisposable = new LifetimeDisposable();
            }

            PreLoadScene(targetScenes).Subscribe().AddTo(preLoadDisposable.Disposable);
        }
コード例 #4
0
        //----- 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;
        }
コード例 #5
0
        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();
        }
コード例 #6
0
        //----- 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;
        }
コード例 #7
0
        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;
        }
コード例 #8
0
        //----- 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();
        }
コード例 #9
0
        //----- 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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        //----- 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;
        }