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); }
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); }
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; }