114 lines
2.8 KiB
C#
114 lines
2.8 KiB
C#
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>
|
|
/// PVP保护次数
|
|
/// </summary>
|
|
public readonly int PvpProtectionCount;
|
|
|
|
/// <summary>
|
|
/// 高账到期UTC时间戳
|
|
/// </summary>
|
|
public readonly long ExpirationTimestamp;
|
|
|
|
/// <summary>
|
|
/// 剩余时间(秒)
|
|
/// </summary>
|
|
public readonly long RemainingSeconds;
|
|
|
|
/// <summary>
|
|
/// 状态变化的原因
|
|
/// </summary>
|
|
public readonly PremiumChangeReason Reason;
|
|
|
|
public PremiumStatusChangedEvent(bool isActivated, int pvpCount, long expirationTimestamp, long remainingSeconds, PremiumChangeReason reason)
|
|
{
|
|
this.IsActivated = isActivated;
|
|
this.PvpProtectionCount = pvpCount;
|
|
this.ExpirationTimestamp = expirationTimestamp;
|
|
this.RemainingSeconds = remainingSeconds;
|
|
this.Reason = reason;
|
|
}
|
|
}
|
|
|
|
public class PremiumHandle : MonoBehaviour
|
|
{
|
|
/// <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);
|
|
}
|
|
|
|
protected virtual void OnPremiumStatusChanged(PremiumStatusChangedEvent eventData)
|
|
{
|
|
if (eventData.IsActivated)
|
|
{
|
|
gameObject.transform.localScale = Vector3.one;
|
|
|
|
//if (eventData.Reason == PremiumChangeReason.Sync)
|
|
//{
|
|
// Debug.Log("高账状态因登录同步而激活,不弹窗。");
|
|
//}
|
|
//else
|
|
//{
|
|
// Debug.Log("高账状态更新:" + eventData.Reason);
|
|
//}
|
|
|
|
}
|
|
else
|
|
{
|
|
gameObject.transform.localScale = Vector3.zero;
|
|
}
|
|
}
|
|
}
|