Advertisement
Guest User

Untitled

a guest
Apr 28th, 2015
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.40 KB | None | 0 0
  1. using NwgLibrary;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using UnityEngine;
  5.  
  6. namespace Common
  7. {
  8. /// <summary>
  9. /// デバッグ出力用のラベルを管理するクラス
  10. /// </summary>
  11. [RequireComponent( typeof( UILabel ) )]
  12. public sealed class UIDebugLabel : MonoBehaviour
  13. {
  14. /// <summary>
  15. /// ログのレベル
  16. /// </summary>
  17. public enum Level
  18. {
  19. /// <summary>
  20. /// 情報
  21. /// </summary>
  22. INFO,
  23.  
  24. /// <summary>
  25. /// 警告
  26. /// </summary>
  27. WARNING,
  28.  
  29. /// <summary>
  30. /// エラー
  31. /// </summary>
  32. ERROR,
  33.  
  34. /// <summary>
  35. /// 例外
  36. /// </summary>
  37. ASSERT,
  38. }
  39.  
  40. [SerializeField] private int MaxLog = 24; // ログの最大数
  41. [SerializeField] private Color InfoColor = Color.white; // 情報ログの色
  42. [SerializeField] private Color WarningColor = Color.yellow; // 警告ログの色
  43. [SerializeField] private Color ErrorColor = Color.red; // エラーログの色
  44. [SerializeField] private Color AssertColor = Color.magenta; // 例外ログの色
  45. [SerializeField] private bool IsConsole = true; // Console ウィンドウに出力するかどうか
  46.  
  47. private UILabel mUILabel; // UILabel のインスタンス
  48. private Queue<string> mLogQueue; // ログのキュー
  49. private Dictionary<Level, Color> mColorTable; // 各レベルごとの色のテーブル
  50.  
  51. /// <summary>
  52. /// 初期化する時に呼び出されます
  53. /// </summary>
  54. private void Awake()
  55. {
  56. mUILabel = GetComponent<UILabel>();
  57. mUILabel.text = string.Empty;
  58. mLogQueue = new Queue<string>( MaxLog );
  59. mColorTable = new Dictionary<Level, Color>
  60. {
  61. { Level.INFO, InfoColor },
  62. { Level.WARNING, WarningColor },
  63. { Level.ERROR, ErrorColor },
  64. { Level.ASSERT, AssertColor },
  65. };
  66. }
  67.  
  68. /// <summary>
  69. /// 更新する時に呼び出されます
  70. /// </summary>
  71. private void Update()
  72. {
  73. if ( mUILabel == null )
  74. {
  75. return;
  76. }
  77.  
  78. var builder = new StringBuilder();
  79. int index = 0;
  80. foreach ( var n in mLogQueue )
  81. {
  82. if ( index < mLogQueue.Count - 1 )
  83. {
  84. builder.AppendLine( n );
  85. }
  86. else
  87. {
  88. builder.Append( n );
  89. }
  90. index++;
  91. }
  92. mUILabel.text = builder.ToString();
  93. }
  94.  
  95. /// <summary>
  96. /// 情報ログを出力します
  97. /// </summary>
  98. public void Log( object message )
  99. {
  100. Push( Level.INFO, message, IsConsole );
  101. }
  102.  
  103. /// <summary>
  104. /// 情報ログを出力します
  105. /// </summary>
  106. public void Log( object message, bool isConsole )
  107. {
  108. Push( Level.INFO, message, isConsole );
  109. }
  110.  
  111. /// <summary>
  112. /// 情報ログを出力します
  113. /// </summary>
  114. public void Log( bool condition, object message )
  115. {
  116. if ( condition )
  117. {
  118. return;
  119. }
  120. Push( Level.INFO, message );
  121. }
  122.  
  123. /// <summary>
  124. /// 情報ログを出力します
  125. /// </summary>
  126. public void Log( bool condition, object message, bool isConsole )
  127. {
  128. if ( condition )
  129. {
  130. return;
  131. }
  132. Push( Level.INFO, message, isConsole );
  133. }
  134.  
  135. /// <summary>
  136. /// 警告ログを出力します
  137. /// </summary>
  138. public void Warning( object message )
  139. {
  140. Push( Level.WARNING, message, IsConsole );
  141. }
  142.  
  143. /// <summary>
  144. /// 警告ログを出力します
  145. /// </summary>
  146. public void Warning( object message, bool isConsole )
  147. {
  148. Push( Level.WARNING, message, isConsole );
  149. }
  150.  
  151. /// <summary>
  152. /// 警告ログを出力します
  153. /// </summary>
  154. public void Warning( bool condition, object message )
  155. {
  156. if ( condition )
  157. {
  158. return;
  159. }
  160. Push( Level.WARNING, message, IsConsole );
  161. }
  162.  
  163. /// <summary>
  164. /// 警告ログを出力します
  165. /// </summary>
  166. public void Warning( bool condition, object message, bool isConsole )
  167. {
  168. if ( condition )
  169. {
  170. return;
  171. }
  172. Push( Level.WARNING, message, isConsole );
  173. }
  174.  
  175. /// <summary>
  176. /// エラーログを出力します
  177. /// </summary>
  178. public void Error( object message )
  179. {
  180. Push( Level.ERROR, message, IsConsole );
  181. }
  182.  
  183. /// <summary>
  184. /// エラーログを出力します
  185. /// </summary>
  186. public void Error( object message, bool isConsole )
  187. {
  188. Push( Level.ERROR, message, isConsole );
  189. }
  190.  
  191. /// <summary>
  192. /// エラーログを出力します
  193. /// </summary>
  194. public void Error( bool condition, object message )
  195. {
  196. if ( condition )
  197. {
  198. return;
  199. }
  200. Push( Level.ERROR, message, IsConsole );
  201. }
  202.  
  203. /// <summary>
  204. /// エラーログを出力します
  205. /// </summary>
  206. public void Error( bool condition, object message, bool isConsole )
  207. {
  208. if ( condition )
  209. {
  210. return;
  211. }
  212. Push( Level.ERROR, message, isConsole );
  213. }
  214.  
  215. /// <summary>
  216. /// 例外ログを出力します
  217. /// </summary>
  218. public void Assert( object message )
  219. {
  220. Push( Level.ASSERT, message, IsConsole );
  221. }
  222.  
  223. /// <summary>
  224. /// 例外ログを出力します
  225. /// </summary>
  226. public void Assert( object message, bool isConsole )
  227. {
  228. Push( Level.ASSERT, message, isConsole );
  229. }
  230.  
  231. /// <summary>
  232. /// 例外ログを出力します
  233. /// </summary>
  234. public void Assert( bool condition, object message )
  235. {
  236. if ( condition )
  237. {
  238. return;
  239. }
  240. Push( Level.ASSERT, message, IsConsole );
  241. }
  242.  
  243. /// <summary>
  244. /// 例外ログを出力します
  245. /// </summary>
  246. public void Assert( bool condition, object message, bool isConsole )
  247. {
  248. if ( condition )
  249. {
  250. return;
  251. }
  252. Push( Level.ASSERT, message, isConsole );
  253. }
  254.  
  255. /// <summary>
  256. /// ログをキューに詰めます
  257. /// </summary>
  258. public void Push( Level level, object message )
  259. {
  260. Push( level, message, IsConsole );
  261. }
  262.  
  263. /// <summary>
  264. /// ログをキューに詰めます
  265. /// </summary>
  266. public void Push( Level level, object message, bool isConsole )
  267. {
  268. // キューが一杯だったら後ろを削除します
  269. if ( MaxLog <= mLogQueue.Count )
  270. {
  271. mLogQueue.Dequeue();
  272. }
  273.  
  274. var nguiText = string.Format( "[{0}]{1}[-]", mColorTable[ level ].EncodeColor(), message );
  275.  
  276. // キューに詰めます
  277. mLogQueue.Enqueue( nguiText );
  278.  
  279. // コンソールに出力します
  280. if ( isConsole )
  281. {
  282. switch (level)
  283. {
  284. case Level.INFO: DebugUtils.Log( message ); break;
  285. case Level.WARNING: DebugUtils.Warning( message ); break;
  286. case Level.ERROR: DebugUtils.Error( message ); break;
  287. case Level.ASSERT: DebugUtils.Assert( message ); break;
  288. }
  289. }
  290. }
  291.  
  292. /// <summary>
  293. /// ログをクリアします
  294. /// </summary>
  295. public void Clear()
  296. {
  297. mLogQueue.Clear();
  298. }
  299. }
  300. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement