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 PremiumChangeReason Reason; public PremiumStatusChangedEvent(bool isActivated, int pvpCount, long expirationTimestamp, long remainingSeconds, PremiumChangeReason reason, bool needHide) { this.IsActivated = isActivated; this.PvpProtectionCount = pvpCount; this.ExpirationTimestamp = expirationTimestamp; this.RemainingSeconds = remainingSeconds; this.Reason = reason; this.IsNeedHide = needHide; } } 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; } } }