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