(client) feat:健康给予,路径优化,结算界面,商店界面 (#60)

Co-authored-by: m0_75251201 <m0_75251201@noreply.gitcode.com>
Reviewed-on: http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite/pulls/60
This commit is contained in:
2025-10-10 14:08:23 +08:00
parent 9a797479ff
commit 16b49f3d3a
1900 changed files with 114053 additions and 34157 deletions

View File

@@ -7,29 +7,10 @@ namespace Logging
{
public static class LogCapturer
{
// 日志条目结构
public struct LogEntry
{
public DateTime Timestamp;
public LogType Type;
public string Message;
public string StackTrace;
public override string ToString()
{
// 逻辑修改扩展条件使LogType.Error和LogType.Assert也能显示堆栈信息
if (Type == LogType.Exception || Type == LogType.Error || Type == LogType.Assert)
{
return $"[{Timestamp:HH:mm:ss}] [{Type}] {Message}\n{StackTrace}";
}
return $"[{Timestamp:HH:mm:ss}] [{Type}] {Message}";
}
}
private static readonly Queue<LogEntry> _logs = new Queue<LogEntry>();
private static readonly object _lock = new object(); // 线程锁
private static readonly Queue<LogEntry> _logs = new();
private static readonly object _lock = new(); // 线程锁
private static int _maxLogs = 1000; // 默认容量
private static bool _isInitialized = false; // 逻辑修改:添加一个私有标志来跟踪是否已初始化
private static bool _isInitialized; // 逻辑修改:添加一个私有标志来跟踪是否已初始化
// 最大日志容量属性
public static int MaxLogs
@@ -57,12 +38,12 @@ namespace Logging
Debug.LogWarning("[LogCapturer] Init() called multiple times. LogCapturer is already initialized.");
return;
}
Application.logMessageReceivedThreaded += HandleLog;
_isInitialized = true;
}
}
// 逻辑修改:添加一个 Shutdown 方法来解除事件注册和清理
public static void Shutdown()
{
@@ -96,20 +77,14 @@ namespace Logging
_logs.Enqueue(entry);
TrimExcess();
if (type is LogType.Error or LogType.Assert or LogType.Exception)
{
UIInputControl.Instance.Show("LogUI");
}
if (type is LogType.Error or LogType.Assert or LogType.Exception) UIInputControl.Instance.Show("LogUI");
}
}
// 日志队列修剪
private static void TrimExcess()
{
while (_logs.Count > _maxLogs)
{
_logs.Dequeue();
}
while (_logs.Count > _maxLogs) _logs.Dequeue();
}
// 获取当前所有日志(倒序:最新在前)
@@ -131,5 +106,22 @@ namespace Logging
_logs.Clear();
}
}
// 日志条目结构
public struct LogEntry
{
public DateTime Timestamp;
public LogType Type;
public string Message;
public string StackTrace;
public override string ToString()
{
// 逻辑修改扩展条件使LogType.Error和LogType.Assert也能显示堆栈信息
if (Type == LogType.Exception || Type == LogType.Error || Type == LogType.Assert)
return $"[{Timestamp:HH:mm:ss}] [{Type}] {Message}\n{StackTrace}";
return $"[{Timestamp:HH:mm:ss}] [{Type}] {Message}";
}
}
}
}
}

View File

@@ -1,15 +1,20 @@
using System.Threading.Tasks;
using Managers;
namespace Logging
{
public class LoggerManagerWrapper : ILaunchManager
{
public bool Completed { get; set; }
public string StepDescription => "初始化日志";
public void Init()
public async Task Init()
{
Logging.UnityLogger.Instance.Init();
UnityLogger.Instance.Init();
// LogCapturer.Init();
Completed = true;
}
public void Clear()
{
}

View File

@@ -1,3 +1,4 @@
using System.Threading.Tasks;
using Managers;
using Serilog;
using UnityEngine;
@@ -8,23 +9,27 @@ namespace Logging
{
public class UnityLogger : Singleton<UnityLogger>, ILaunchManager
{
private bool _initialized = false;
private readonly SerilogLogger _logger = new LoggerConfiguration()
.WriteTo.File("Logs/UnityLog.txt")
.CreateLogger();
public void Init()
private bool _initialized;
public Task Init()
{
if (_initialized) return;
if (_initialized) return Task.CompletedTask;
Application.logMessageReceivedThreaded += OnLogMessageReceived;
_initialized = true;
Completed = true;
return Task.CompletedTask;
}
public void Clear()
{
}
public bool Completed { get; set; }
public string StepDescription => "初始化日志";
private void OnLogMessageReceived(string logString, string stackTrace, LogType type)
@@ -32,35 +37,35 @@ namespace Logging
switch (type)
{
case LogType.Assert:
{
_logger.Warning("\nContent: {0}", logString);
break;
}
{
_logger.Warning("\nContent: {0}", logString);
break;
}
case LogType.Log:
{
_logger.Information("\nContent: {0}", logString);
break;
}
{
_logger.Information("\nContent: {0}", logString);
break;
}
case LogType.Warning:
{
_logger.Warning("\nContent: {0}", logString);
break;
}
{
_logger.Warning("\nContent: {0}", logString);
break;
}
case LogType.Error:
{
_logger.Error("\nContent: {0}\nStackTrace:\n{1}", logString, stackTrace[..^1]);
break;
}
{
_logger.Error("\nContent: {0}\nStackTrace:\n{1}", logString, stackTrace[..^1]);
break;
}
case LogType.Exception:
{
_logger.Fatal("\nContent: {0}\nStackTrace:\n{1}", logString, stackTrace[..^1]);
break;
}
{
_logger.Fatal("\nContent: {0}\nStackTrace:\n{1}", logString, stackTrace[..^1]);
break;
}
default:
{
_logger.Information("\nContent: {0}", logString);
break;
}
{
_logger.Information("\nContent: {0}", logString);
break;
}
}
}
}