NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/GameWrapper/Premium/PremiumHandle.cs

113 lines
2.8 KiB
C#
Raw Normal View History

using Framework;
using UnityEngine;
/// <summary>
/// 高级账户状态变化的触发原因
/// </summary>
public enum PremiumChangeReason
{
/// <summary>
/// 未知或默认原因(例如,数据同步)
/// </summary>
Sync,
/// <summary>
/// 因为到期而失效
/// </summary>
Expiration
}
/// <summary>
/// 高级账户状态变化事件的数据包
/// </summary>
public class PremiumStatusChangedEvent
{
/// <summary>
/// 当前是否已激活
/// </summary>
public readonly bool IsActivated;
/// <summary>
/// 当前需要展示
/// </summary>
public readonly bool IsNeedHide;
2025-12-23 13:09:28 +08:00
/// <summary>
/// PVP保护次数
/// </summary>
public readonly int PvpProtectionCount;
2026-01-14 12:13:44 +08:00
/// <summary>
/// 高账到期UTC时间戳
/// </summary>
public readonly long ExpirationTimestamp;
2026-01-16 19:35:52 +08:00
/// <summary>
/// 剩余时间(秒)
/// </summary>
public readonly long RemainingSeconds;
public readonly bool OnlyPvpStatus;
2026-01-16 19:35:52 +08:00
/// <summary>
/// 状态变化的原因
/// </summary>
public readonly PremiumChangeReason Reason;
public PremiumStatusChangedEvent(bool isActivated, int pvpCount, long expirationTimestamp, long remainingSeconds, PremiumChangeReason reason, bool needHide, bool onlyPvpStatus = false)
{
this.IsActivated = isActivated;
2025-12-23 13:09:28 +08:00
this.PvpProtectionCount = pvpCount;
2026-01-14 12:13:44 +08:00
this.ExpirationTimestamp = expirationTimestamp;
2026-01-16 19:35:52 +08:00
this.RemainingSeconds = remainingSeconds;
this.Reason = reason;
this.IsNeedHide = needHide;
this.OnlyPvpStatus = onlyPvpStatus;
}
}
public class PremiumHandle : MonoBehaviour
{
2025-12-23 15:12:37 +08:00
/// <summary>
/// 未激活时的显示状态
/// </summary>
public enum InactiveDisplayMode
{
/// <summary>
/// 隐藏
/// </summary>
Hidden,
/// <summary>
/// 置灰
/// </summary>
GrayedOut
}
[Header("未激活时标志的显示状态")]
public InactiveDisplayMode inactiveDisplayMode = InactiveDisplayMode.Hidden;
private void OnEnable()
{
EventManager.Instance.Register<PremiumStatusChangedEvent>(EventManager.EventName.PremiumStatusRefresh, OnPremiumStatusChanged);
EventManager.Instance.Send(EventManager.EventName.RequestPremiumStatus);
}
private void OnDisable()
{
EventManager.Instance.Unregister<PremiumStatusChangedEvent>(EventManager.EventName.PremiumStatusRefresh, OnPremiumStatusChanged);
}
2025-12-23 13:09:28 +08:00
protected virtual void OnPremiumStatusChanged(PremiumStatusChangedEvent eventData)
{
if (eventData.IsActivated && !eventData.IsNeedHide)
{
gameObject.transform.localScale = Vector3.one;
}
else
{
gameObject.transform.localScale = Vector3.zero;
}
}
}