using System.Collections.Generic; using UnityEngine; using UI.Common; using System; namespace GFGGame { public class LogController : SingletonBase { public const string _all = "All"; public const string _error = "Error"; public const string _log = "Log"; public const int _maxCount = 100; public Dictionary> msgDic = new Dictionary>(); private UI_BtnLog _btnLog; public void Init() { msgDic.Add(_all, new List()); msgDic.Add(_error, new List()); msgDic.Add(_log, new List()); if (LauncherConfig.onDebug == 1) { this.CreatBtnLog(); } this.AddMsgListener(); } public void AddMsgListener() { Application.logMessageReceived += (condition, stackTrace, type) => { if (type == LogType.Error || type == LogType.Exception || type == LogType.Log) { this.AddMsgToDic(condition, stackTrace, type); } }; } private void AddMsgToDic(string condition, string stackTrace, LogType type) { string msg = ""; DateTime now = DateTime.Now; string time = string.Format("[{0}.{1} {2}:{3}:{4}]", now.Month, now.Day, now.Hour, now.Minute, now.Second); switch (type) { case LogType.Error: case LogType.Exception: if (msgDic[_all].Count == _maxCount) { msgDic[_all].RemoveAt(0); } if (msgDic[_error].Count == _maxCount) { msgDic[_error].RemoveAt(0); } msg = string.Format("error@{2}\n{0}\n{1}", condition, stackTrace, time); msgDic[_all].Add(msg); msgDic[_error].Add(msg); if(_btnLog != null) { _btnLog.m_c1.selectedIndex = 1; _btnLog.target.alpha = 1; } if (LauncherConfig.onDebug >= 1) { ViewManager.Show(ViewName.LOG_VIEW); } break; default: if (msgDic[_all].Count == _maxCount) { msgDic[_all].RemoveAt(0); } if (msgDic[_log].Count == _maxCount) { msgDic[_log].RemoveAt(0); } msg = string.Format("log@{2}\n{0}\n{1}", condition, stackTrace, time); msgDic[_all].Add(msg); msgDic[_log].Add(msg); if (LauncherConfig.onDebug >= 2) { ViewManager.Show(ViewName.LOG_VIEW); } break; } } private void CreatBtnLog() { if (_btnLog == null) { _btnLog = UI_BtnLog.Create(); ViewManager.AddChildToDebugLayer(_btnLog.target); this.SetBtnLogVisable(false); _btnLog.target.x = 50; _btnLog.target.y = 1880; _btnLog.target.onClick.Add(this.OnBtnLogClick); } } private void OnBtnLogClick() { ViewManager.Show(ViewName.LOG_VIEW); _btnLog.m_c1.selectedIndex = 0; _btnLog.target.alpha = 0; } public void SetBtnLogVisable(bool visable) { _btnLog.target.visible = visable; } } }