Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/BitStrap/RuntimeConsole.cs
2026-02-21 16:45:37 +08:00

155 lines
3.3 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace BitStrap
{
public class RuntimeConsole : MonoBehaviour
{
private struct Log
{
public LogType logType;
public string message;
public string stackTrace;
public bool AsGUI(bool showLog, bool showWarning, bool showError)
{
switch (logType)
{
case LogType.Error:
case LogType.Assert:
case LogType.Exception:
if (!showError)
{
return false;
}
GUI.color = Color.red;
break;
case LogType.Warning:
if (!showWarning)
{
return false;
}
GUI.color = Color.yellow;
break;
case LogType.Log:
if (!showLog)
{
return false;
}
GUI.color = Color.white;
break;
}
bool result = GUILayout.Button("> " + message, GUI.skin.label);
GUI.color = Color.white;
return result;
}
}
public int maxLogs = 100;
private List<Log> logs = new List<Log>();
private int selectedLog = -1;
private Vector2 scroll = Vector2.zero;
private Vector2 stackTraceScroll = Vector2.zero;
private bool showLog = true;
private bool showWarning;
private bool showError = true;
private GUIStyle windowStyle;
private void Awake()
{
if (base.enabled)
{
Application.logMessageReceived += AddMessage;
}
}
private void TryAdjustWindowBgColor()
{
if (windowStyle == null)
{
windowStyle = new GUIStyle(GUI.skin.window);
int num = 4;
int num2 = 4;
Texture2D texture2D = new Texture2D(num, num2);
Color[] array = new Color[num * num2];
for (int i = 0; i < array.Length; i++)
{
array[i] = new Color(0f, 0f, 0f, 0.8f);
}
texture2D.SetPixels(array);
texture2D.Apply();
windowStyle.normal.background = texture2D;
}
}
private void AddMessage(string message, string stackTrace, LogType logType)
{
if (base.enabled)
{
Log item = new Log
{
logType = logType,
message = message,
stackTrace = stackTrace
};
logs.Insert(logs.Count, item);
if (logs.Count > maxLogs && maxLogs > 0)
{
logs.RemoveAt(0);
}
}
}
private void OnGUI()
{
TryAdjustWindowBgColor();
if (!Input.GetKey(KeyCode.LeftShift) || !Input.GetKey(KeyCode.C))
{
return;
}
Rect screenRect = new Rect(0f, 0f, Screen.width, Screen.height);
GUILayout.BeginArea(screenRect, windowStyle);
GUILayout.BeginHorizontal();
GUILayout.Label("LOGS");
GUILayout.FlexibleSpace();
showLog = GUILayout.Toggle(showLog, "Log", GUI.skin.button);
showWarning = GUILayout.Toggle(showWarning, "Warning", GUI.skin.button);
showError = GUILayout.Toggle(showError, "Error", GUI.skin.button);
if (GUILayout.Button("Clear"))
{
logs.Clear();
selectedLog = -1;
}
GUILayout.EndHorizontal();
scroll = GUILayout.BeginScrollView(scroll);
for (int i = 0; i < logs.Count; i++)
{
if (logs[i].AsGUI(showLog, showWarning, showError))
{
selectedLog = i;
}
}
GUILayout.FlexibleSpace();
GUILayout.EndScrollView();
if (selectedLog >= 0)
{
GUILayout.Label("-------------------------------------------------------------------------");
stackTraceScroll = GUILayout.BeginScrollView(stackTraceScroll, GUILayout.Height(128f));
GUILayout.Label(logs[selectedLog].stackTrace);
GUILayout.EndScrollView();
}
GUILayout.EndArea();
}
}
}