114 lines
2.9 KiB
C#
114 lines
2.9 KiB
C#
|
|
using System;
|
|||
|
|
using TMPro;
|
|||
|
|
using UnityEngine;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 时间更新组件
|
|||
|
|
/// 独立于BasePanel的Update系统,专门用于更新UI中的时间显示
|
|||
|
|
/// </summary>
|
|||
|
|
public class TimeUpdateComponent : MonoBehaviour
|
|||
|
|
{
|
|||
|
|
[Header("时间显示组件")]
|
|||
|
|
public TextMeshProUGUI DateTimeText;
|
|||
|
|
|
|||
|
|
[Header("更新设置")]
|
|||
|
|
public float UpdateInterval = 1f; // 更新间隔(秒)
|
|||
|
|
public string TimeFormat = "yyyy-MM-dd HH:mm:ss"; // 时间格式
|
|||
|
|
public bool UseLocalTime = true; // 使用本地时间还是UTC时间
|
|||
|
|
|
|||
|
|
private float _lastUpdateTime;
|
|||
|
|
private bool _isActive = true;
|
|||
|
|
|
|||
|
|
void Start()
|
|||
|
|
{
|
|||
|
|
// 立即更新一次
|
|||
|
|
UpdateDateTime();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Update()
|
|||
|
|
{
|
|||
|
|
if (!_isActive || DateTimeText == null) return;
|
|||
|
|
|
|||
|
|
// 检查是否需要更新
|
|||
|
|
if (Time.time - _lastUpdateTime >= UpdateInterval)
|
|||
|
|
{
|
|||
|
|
UpdateDateTime();
|
|||
|
|
_lastUpdateTime = Time.time;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 更新时间显示
|
|||
|
|
/// </summary>
|
|||
|
|
private void UpdateDateTime()
|
|||
|
|
{
|
|||
|
|
if (DateTimeText != null)
|
|||
|
|
{
|
|||
|
|
// 从SystemSettingsService获取统一时间(默认跟随系统时钟,可选自定义偏移)
|
|||
|
|
var settingsService = ServiceLocator.Get<ISystemSettingsService>();
|
|||
|
|
DateTime displayTime = settingsService != null
|
|||
|
|
? settingsService.SystemTime
|
|||
|
|
: (UseLocalTime ? DateTime.Now : DateTime.UtcNow);
|
|||
|
|
|
|||
|
|
DateTimeText.text = displayTime.ToString(TimeFormat);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 启用或禁用时间更新
|
|||
|
|
/// </summary>
|
|||
|
|
public void SetActive(bool active)
|
|||
|
|
{
|
|||
|
|
_isActive = active;
|
|||
|
|
if (active)
|
|||
|
|
{
|
|||
|
|
UpdateDateTime(); // 激活时立即更新
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 设置时间格式
|
|||
|
|
/// </summary>
|
|||
|
|
public void SetTimeFormat(string format)
|
|||
|
|
{
|
|||
|
|
if (!string.IsNullOrEmpty(format))
|
|||
|
|
{
|
|||
|
|
TimeFormat = format;
|
|||
|
|
UpdateDateTime(); // 格式改变后立即更新
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 设置更新间隔
|
|||
|
|
/// </summary>
|
|||
|
|
public void SetUpdateInterval(float interval)
|
|||
|
|
{
|
|||
|
|
if (interval > 0)
|
|||
|
|
{
|
|||
|
|
UpdateInterval = interval;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 刷新配置时间(从SystemSettingsService重新读取)
|
|||
|
|
/// </summary>
|
|||
|
|
public void RefreshConfigTime()
|
|||
|
|
{
|
|||
|
|
UpdateDateTime();
|
|||
|
|
Debug.Log("TimeUpdateComponent: 已刷新配置时间");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取当前显示的时间(包括偏移计算)
|
|||
|
|
/// </summary>
|
|||
|
|
public DateTime GetCurrentDisplayTime()
|
|||
|
|
{
|
|||
|
|
var settingsService = ServiceLocator.Get<ISystemSettingsService>();
|
|||
|
|
if (settingsService != null)
|
|||
|
|
{
|
|||
|
|
return settingsService.SystemTime;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return UseLocalTime ? DateTime.Now : DateTime.UtcNow;
|
|||
|
|
}
|
|||
|
|
}
|