コード例 #1
0
        public override void OnEnable()
        {
            base.OnEnable();

            Canvas.renderMode               = RenderMode.ScreenSpaceOverlay;
            Canvas.sortingOrder             = SortingOrder;
            CanvasScaler.matchWidthOrHeight = 1;
            CanvasScaler.uiScaleMode        = CanvasScaler.ScaleMode.ScaleWithScreenSize;

            LogView.EscButton.OnPointerClickAsObservable().Select(_ => false)
            .Merge(Setting.ShowOnUGUI.DistinctUntilChanged())
            .Subscribe(b =>
            {
                LogView.gameObject.SetActive(b);
            }).AddTo(this.Disposer).AddTo(Canvas).AddTo(LogView);

            Console.RegisterCommand("Debug", "Show debug console message on UGui.", "Debug [On/Off]", (args) =>
            {
                bool result = args.Length == 0 ? true : args.Any(m =>
                {
                    string cmd = m.Trim().ToLower();
                    return(cmd == "on" || cmd == "true");
                });
                LogView.gameObject.SetActive(result);
                return(string.Format("Debug message show on UGui is {0}", result == true ? "On" : "Off"));
            });

            LogView.ClearButton.OnPointerClickAsObservable().Select(_ => true)
            .Merge(ClearCommand.OnClearAsObservable())
            .Subscribe(_ =>
            {
                LogView.Data.Clear();
                LogView.StackTraceText.text = Empty;
            }).AddTo(this.Disposer).AddTo(Canvas).AddTo(LogView);

            LogView.CollapseToggle.OnPointerClickAsObservable().Subscribe(_ =>
            {
                Setting.DebugView.Collapse.Value = LogView.CollapseToggle.isOn;
            }).AddTo(this.Disposer).AddTo(Canvas).AddTo(LogView);

            LogView.LogToggle.OnPointerClickAsObservable().Subscribe(_ =>
            {
                Setting.DebugView.Log.Value = LogView.LogToggle.isOn;
            }).AddTo(this.Disposer).AddTo(Canvas).AddTo(LogView);

            LogView.WarningToggle.OnPointerClickAsObservable().Subscribe(_ =>
            {
                Setting.DebugView.Warning.Value = LogView.WarningToggle.isOn;
            }).AddTo(this.Disposer).AddTo(Canvas).AddTo(LogView);

            LogView.ErrorToggle.OnPointerClickAsObservable().Subscribe(_ =>
            {
                Setting.DebugView.Error.Value = LogView.ErrorToggle.isOn;
            }).AddTo(this.Disposer).AddTo(Canvas).AddTo(LogView);

            var onCollapse            = Setting.DebugView.Collapse.DistinctUntilChanged();
            var onLog                 = Setting.DebugView.Log.DistinctUntilChanged();
            var onWarning             = Setting.DebugView.Warning.DistinctUntilChanged();
            var onError               = Setting.DebugView.Error.DistinctUntilChanged();
            var onElementCountChanged = LogView.Elements.ObserveEveryValueChanged(elements => elements.Count).ThrottleFirstFrame(1).Select(_ => true);
            var onDataCountChanged    = LogView.Data.ObserveEveryValueChanged(data => data.Count).Select(_ => true);
            var onScrolling           = LogView.ContentScrollbar.OnValueChangedAsObservable().Select(_ => true);
            var onEnabled             = LogView.OnEnableAsObservable().Select(_ => true);

            onCollapse.Merge(onLog).Merge(onWarning).Merge(onError).Merge(onDataCountChanged).Merge(onScrolling).Merge(onEnabled)
            .Where(_ => LogView.gameObject.activeSelf)
            .Subscribe(_ =>
            {
                Debugger.History.Clear();
                LogView.SortedData.Clear();
                LogView.SameDataCountDict.Clear();

                if (Setting.DebugView.Collapse.Value)
                {
                    for (int i = 0; i < LogView.Data.Count; i++)
                    {
                        if (!LogView.SameDataCountDict.ContainsKey(LogView.Data[i]))
                        {
                            LogView.SameDataCountDict.Add(LogView.Data[i], 0);
                        }
                        LogView.SameDataCountDict[LogView.Data[i]]++;
                    }
                    LogView.SortedData = LogView.SameDataCountDict.Keys.ToList();
                }
                else
                {
                    LogView.SortedData = LogView.Data.ToList();
                }

                bool b;
                for (int i = 0; i < LogView.SortedData.Count; i++)
                {
                    b = true;
                    if (LogView.SortedData[i].LogType == LogType.Log && !Setting.DebugView.Log.Value)
                    {
                    }
                    else if (LogView.SortedData[i].LogType == LogType.Warning && !Setting.DebugView.Warning.Value)
                    {
                    }
                    else if (LogView.SortedData[i].LogType == LogType.Error && !Setting.DebugView.Error.Value)
                    {
                    }
                    else
                    {
                        b = false;
                    }
                    if (b)
                    {
                        LogView.SortedData.RemoveAt(i);
                        i--;
                    }
                }

                for (int i = 0; i < LogView.SortedData.Count; i++)
                {
                    if (LogView.SortedData[i].LogType == LogType.Warning)
                    {
                        Debugger.History.Add(string.Format(HtmlWarningStyle, LogView.SortedData[i].Message));
                    }
                    else if (LogView.SortedData[i].LogType == LogType.Error)
                    {
                        Debugger.History.Add(string.Format(HtmlErrorStyle, LogView.SortedData[i].Message));
                    }
                    else
                    {
                        Debugger.History.Add(string.Format(HtmlLogStyle, LogView.SortedData[i].Message));
                    }
                }

                LogView.Scroll(LogView.SortedData.ToArray(), LogView.ContentScrollbar.value, LogView.ElementSize);

                int logCount     = 0;
                int warningCount = 0;
                int errorCount   = 0;
                for (int i = 0; i < LogView.SortedData.Count; i++)
                {
                    if (LogView.SortedData[i].LogType == LogType.Log)
                    {
                        logCount++;
                    }
                    else if (LogView.SortedData[i].LogType == LogType.Warning)
                    {
                        warningCount++;
                    }
                    else if (LogView.SortedData[i].LogType == LogType.Error)
                    {
                        errorCount++;
                    }
                }

                LogView.LogText.text     = string.Format(LogCount, logCount);
                LogView.WarningText.text = string.Format(WarningCount, warningCount);
                LogView.ErrorText.text   = string.Format(ErrorCount, errorCount);

                LogView.CollapseToggle.isOn = Setting.DebugView.Collapse.Value;
                LogView.LogToggle.isOn      = Setting.DebugView.Log.Value;
                LogView.WarningToggle.isOn  = Setting.DebugView.Warning.Value;
                LogView.ErrorToggle.isOn    = Setting.DebugView.Error.Value;
            }).AddTo(this.Disposer).AddTo(Canvas).AddTo(LogView);

            LogElementComponents.OnAdd().Subscribe(entity =>
            {
                var logElement    = entity.GetComponent <LogElement>();
                var viewComponent = entity.GetComponent <ViewComponent>();
                var rectTransform = viewComponent.Transforms[0] as RectTransform;

                rectTransform.sizeDelta = new Vector2(rectTransform.sizeDelta.x, LogView.ElementSize);

                logElement.OnPointerClickAsObservable().Subscribe(_ =>
                {
                    var data = logElement.GetData();
                    if (data.LogType == LogType.Warning)
                    {
                        LogView.StackTraceText.text = string.Format(WarningStyle, Size, data.Message);
                    }
                    else if (data.LogType == LogType.Error)
                    {
                        LogView.StackTraceText.text = string.Format(ErrorStyle, Size, data.Message);
                    }
                    else
                    {
                        LogView.StackTraceText.text = string.Format(LogStyle, Size, data.Message);
                    }
                }).AddTo(this.Disposer).AddTo(Canvas).AddTo(LogView).AddTo(viewComponent.Disposer);
            }).AddTo(this.Disposer).AddTo(Canvas).AddTo(LogView);

            Debugger.RegisterPreMatchingLayer(OnPreMatchingLayerInEditor);
            Application.logMessageReceived += HandleLog;
            LogView.OnScroll += OnScroll;
            LogView.gameObject.SetActive(false);
        }
コード例 #2
0
        public override void OnEnable()
        {
            base.OnEnable();

            DebugCanvas.OnAdd().Subscribe(debugEntity =>
            {
                var debugCanvas = debugEntity.GetComponent <DebugCanvas>();

                DebugView.OnAdd().Subscribe(entity =>
                {
                    var debugView = entity.GetComponent <DebugView>();

                    debugView.OkButton.OnClickAsObservable()
                    .Merge(debugView.InputField.OnSubmitAsObservable().AsUnitObservable())
                    .Subscribe(_ =>
                    {
                        if (UnityEngine.EventSystems.EventSystem.current.alreadySelecting)
                        {
                            return;
                        }
                        if (debugView.InputField.text.Length > 0)
                        {
                            Console.Run(debugView.InputField.text);
                            debugView.OutputScrollbar.value = 0;
                            debugView.InputField.MoveTextStart(false);
                            debugView.InputField.text = "";
                            debugView.InputField.MoveTextEnd(false);
                        }
                        debugView.InputField.ActivateInputField();
                    }).AddTo(this.Disposer).AddTo(debugCanvas.Disposer).AddTo(debugView.Disposer);

                    debugView.ClearButton.OnClickAsObservable().Select(_ => true)
                    .Merge(ClearCommand.OnClearAsObservable())
                    .Subscribe(_ =>
                    {
                        debugView.InputField.text = "";
                        debugView.InputField.ActivateInputField();
                    }).AddTo(this.Disposer).AddTo(debugCanvas.Disposer).AddTo(debugView.Disposer);

                    var clickStream = Observable.EveryUpdate().Where(_ => Input.anyKeyDown);

                    clickStream.Buffer(clickStream.Throttle(TimeSpan.FromMilliseconds(250)))
                    .Where(c => c.Count >= 20).AsUnitObservable()
                    .Merge(clickStream.Where(_ => Input.GetKeyDown(KeyCode.BackQuote)).AsUnitObservable())
                    .Subscribe(_ =>
                    {
                        debugView.DebugPanel.gameObject.SetActive(!debugView.DebugPanel.gameObject.activeSelf);
                        if (debugView.DebugPanel.gameObject.activeSelf)
                        {
                            debugView.InputField.ActivateInputField();
                            debugView.InputField.text = "";
                        }
                    }).AddTo(this.Disposer).AddTo(debugCanvas.Disposer).AddTo(debugView.Disposer);

                    clickStream.Subscribe(_ =>
                    {
                        if (Input.GetKeyDown(KeyCode.Escape))
                        {
                            debugView.DebugPanel.gameObject.SetActive(false);
                        }
                        else if (Input.GetKeyDown(KeyCode.UpArrow))
                        {
                            var navigatedToInput = Console.InputHistory.Navigate(true);
                            debugView.InputField.MoveTextStart(false);
                            debugView.InputField.text = navigatedToInput;
                            debugView.InputField.MoveTextEnd(false);
                        }
                        else if (Input.GetKeyDown(KeyCode.DownArrow))
                        {
                            var navigatedToInput = Console.InputHistory.Navigate(false);
                            debugView.InputField.MoveTextStart(false);
                            debugView.InputField.text = navigatedToInput;
                            debugView.InputField.MoveTextEnd(false);
                        }
                        else if (Input.GetKeyDown(KeyCode.Tab))
                        {
                            debugView.InputField.MoveTextStart(false);
                            debugView.InputField.text = Console.Complete(debugView.InputField.text);
                            debugView.InputField.MoveTextEnd(false);
                        }
                    }).AddTo(this.Disposer).AddTo(debugCanvas.Disposer).AddTo(debugView.Disposer);

                    debugView.DebugPanel.gameObject.SetActive(false);
                }).AddTo(this.Disposer).AddTo(debugCanvas.Disposer);
            }).AddTo(this.Disposer);

            Console.RegisterLog(OnLog);
        }
コード例 #3
0
        public override void OnEnable()
        {
            base.OnEnable();

            ApplyChanges();

            DebugCanvas.OnAdd().Subscribe(entity =>
            {
                var debugCanvas  = entity.GetComponent <DebugCanvas>();
                var canvas       = entity.GetComponent <Canvas>();
                var canvasScaler = entity.GetComponent <CanvasScaler>();

                canvas.renderMode               = RenderMode.ScreenSpaceOverlay;
                canvas.sortingOrder             = SortingOrder;
                canvasScaler.matchWidthOrHeight = 1;
                canvasScaler.uiScaleMode        = CanvasScaler.ScaleMode.ScaleWithScreenSize;

                DebugView.OnAdd().Subscribe(viewEntity =>
                {
                    View = viewEntity.GetComponent <DebugView>();

                    View.EscButton.OnPointerClickAsObservable().Select(_ => false)
                    .Merge(Setting.ShowOnUGUI.DistinctUntilChanged())
                    .Subscribe(b =>
                    {
                        View.DebugPanel.gameObject.SetActive(b);
                    }).AddTo(this.Disposer).AddTo(debugCanvas.Disposer).AddTo(View.Disposer);

                    Console.RegisterCommand("Debug", "Show debug console message on UGui.", "Debug [On/Off]", (args) =>
                    {
                        bool result = args.Length == 0 ? true : args.Any(m =>
                        {
                            string cmd = m.Trim().ToLower();
                            return(cmd == "on" || cmd == "true");
                        });
                        View.DebugPanel.gameObject.SetActive(result);
                        return(string.Format("Debug message show on UGui is {0}", result == true ? "On" : "Off"));
                    });

                    View.ClearButton.OnPointerClickAsObservable().Select(_ => true)
                    .Merge(ClearCommand.OnClearAsObservable())
                    .Subscribe(_ =>
                    {
                        while (View.Logs.Count > 0)
                        {
                            GameObject.Destroy(View.Logs[0].GetComponent <ViewComponent>().Transforms[0].gameObject);
                            View.Logs.RemoveAt(0);
                        }
                    }).AddTo(this.Disposer).AddTo(debugCanvas.Disposer).AddTo(View.Disposer);

                    View.CollapseToggle.OnPointerClickAsObservable().Subscribe(_ =>
                    {
                        Setting.DebugView.Collapse.Value = View.CollapseToggle.isOn;
                    }).AddTo(this.Disposer).AddTo(debugCanvas.Disposer).AddTo(View.Disposer);

                    View.LogToggle.OnPointerClickAsObservable().Subscribe(_ =>
                    {
                        Setting.DebugView.Log.Value = View.LogToggle.isOn;
                    }).AddTo(this.Disposer).AddTo(debugCanvas.Disposer).AddTo(View.Disposer);

                    View.WarningToggle.OnPointerClickAsObservable().Subscribe(_ =>
                    {
                        Setting.DebugView.Warning.Value = View.WarningToggle.isOn;
                    }).AddTo(this.Disposer).AddTo(debugCanvas.Disposer).AddTo(View.Disposer);

                    View.ErrorToggle.OnPointerClickAsObservable().Subscribe(_ =>
                    {
                        Setting.DebugView.Error.Value = View.ErrorToggle.isOn;
                    }).AddTo(this.Disposer).AddTo(debugCanvas.Disposer).AddTo(View.Disposer);

                    var onCollapse = Setting.DebugView.Collapse.DistinctUntilChanged();
                    var onLog      = Setting.DebugView.Log.DistinctUntilChanged();
                    var onWarning  = Setting.DebugView.Warning.DistinctUntilChanged();
                    var onError    = Setting.DebugView.Error.DistinctUntilChanged();
                    var onAdd      = View.Logs.ObserveAdd().Select(_ => true);
                    var onRemove   = View.Logs.ObserveRemove().Select(_ => true);
                    onCollapse.Merge(onLog).Merge(onWarning).Merge(onError).Merge(onAdd).Merge(onRemove).Subscribe(_ =>
                    {
                        Debugger.History.Clear();

                        var list = new ReactiveDictionary <string, DebugLog>();
                        for (int i = 0; i < View.Logs.Count; i++)
                        {
                            var view = View.Logs[i].GetComponent <ViewComponent>();
                            var log  = View.Logs[i].GetComponent <DebugLog>();
                            if (i % 2 == 0)
                            {
                                log.MessageBackground.color = MBGColor0;
                                log.CountBackground.color   = CBGColor0;
                            }
                            else
                            {
                                log.MessageBackground.color = MBGColor1;
                                log.CountBackground.color   = CBGColor1;
                            }
                            if (Setting.DebugView.Collapse.Value)
                            {
                                if (list.ContainsKey(log.Message.Value))
                                {
                                    view.Transforms[0].gameObject.SetActive(false);
                                    var t = list[log.Message.Value];
                                    t.Count.Value++;
                                    list[log.Message.Value] = t;
                                }
                                else
                                {
                                    view.Transforms[0].gameObject.SetActive(true);
                                    log.Count.Value = 1;
                                    list.Add(log.Message.Value, log);
                                }
                            }
                            else
                            {
                                view.Transforms[0].gameObject.SetActive(true);
                                log.Count.Value = 1;
                            }
                            if (log.LogType == LogType.Log && !Setting.DebugView.Log.Value)
                            {
                                view.Transforms[0].gameObject.SetActive(false);
                            }
                            else if (log.LogType == LogType.Warning && !Setting.DebugView.Warning.Value)
                            {
                                view.Transforms[0].gameObject.SetActive(false);
                            }
                            else if (log.LogType == LogType.Error && !Setting.DebugView.Error.Value)
                            {
                                view.Transforms[0].gameObject.SetActive(false);
                            }

                            if (view.Transforms[0].gameObject.activeSelf)
                            {
                                string str;
                                if (log.LogType == LogType.Warning)
                                {
                                    str = string.Format(HtmlWarningStyle, log.Message.Value);
                                }
                                else if (log.LogType == LogType.Error)
                                {
                                    str = string.Format(HtmlErrorStyle, log.Message.Value);
                                }
                                else
                                {
                                    str = string.Format(HtmlLogStyle, log.Message.Value);
                                }
                                Debugger.History.Add(str);
                            }
                        }

                        var activeLogs        = View.Logs.Where(e => e.GetComponent <ViewComponent>().Transforms[0].gameObject.activeSelf).Select(e => e.GetComponent <DebugLog>().LogType);
                        View.LogText.text     = string.Format(LogCount, activeLogs.Where(e => e == LogType.Log).Count());
                        View.WarningText.text = string.Format(WarningCount, activeLogs.Where(e => e == LogType.Warning).Count());
                        View.ErrorText.text   = string.Format(ErrorCount, activeLogs.Where(e => e == LogType.Error).Count());

                        View.CollapseToggle.isOn = Setting.DebugView.Collapse.Value;
                        View.LogToggle.isOn      = Setting.DebugView.Log.Value;
                        View.WarningToggle.isOn  = Setting.DebugView.Warning.Value;
                        View.ErrorToggle.isOn    = Setting.DebugView.Error.Value;
                    }).AddTo(this.Disposer).AddTo(debugCanvas.Disposer).AddTo(View.Disposer);

                    View.SelectedLog.DistinctUntilChanged().Subscribe(log =>
                    {
                        if (log == null)
                        {
                            View.StackTraceText.text = Empty;
                        }
                        else
                        {
                            if (log.LogType == LogType.Warning)
                            {
                                View.StackTraceText.text = string.Format(WarningStyle, View.Size, log.Message.Value);
                            }
                            else if (log.LogType == LogType.Error)
                            {
                                View.StackTraceText.text = string.Format(ErrorStyle, View.Size, log.Message.Value);
                            }
                            else
                            {
                                View.StackTraceText.text = string.Format(LogStyle, View.Size, log.Message.Value);
                            }
                        }
                        Observable.EveryEndOfFrame().FirstOrDefault().Subscribe(_ =>
                        {
                            View.StackTraceScrollbar.value = 1;
                        }).AddTo(this.Disposer).AddTo(View.Disposer);
                    }).AddTo(this.Disposer).AddTo(View.Disposer);

                    View.DebugPanel.gameObject.SetActive(false);
                }).AddTo(this.Disposer).AddTo(debugCanvas.Disposer);
            }).AddTo(this.Disposer);

            DebugLog.OnAdd().Subscribe(entity =>
            {
                var view = entity.GetComponent <ViewComponent>();
                var log  = entity.GetComponent <DebugLog>();

                log.Message.DistinctUntilChanged().Subscribe(message =>
                {
                    if (log.LogType == LogType.Warning)
                    {
                        message = string.Format(WarningStyle, View.Size, message);
                    }
                    else if (log.LogType == LogType.Error)
                    {
                        message = string.Format(ErrorStyle, View.Size, message);
                    }
                    else
                    {
                        message = string.Format(LogStyle, View.Size, message);
                    }
                    log.MessageText.text = message;
                }).AddTo(this.Disposer).AddTo(log.Disposer);

                log.Count.DistinctUntilChanged().Subscribe(count =>
                {
                    log.CountText.text = count.ToString();
                }).AddTo(this.Disposer).AddTo(log.Disposer);

                view.Transforms[0].OnPointerClickAsObservable().Subscribe(_ =>
                {
                    View.SelectedLog.Value = log;
                }).AddTo(this.Disposer).AddTo(View.Disposer).AddTo(log.Disposer);
            }).AddTo(this.Disposer);

            Debugger.RegisterPreMatchingLayer(OnPreMatchingLayerInEditor);
            Application.logMessageReceived += HandleLog;
        }