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

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;
}
}
}