using System; using EnhancedUI.EnhancedScroller; using TMPro; using UnityEngine; using UnityEngine.UI; using GameCore; public class EventPartnerScrollViewItem : EnhancedScrollerCellView { public TMP_Text textName, textLvl, textBtnYes, textState, textTime; public Head avatar; public Button btnNo, btnYes; public GameObject iconLoadingGo, btnGrayGo, timeGo; private string _playfabId; private const string AcceptKey = "UI_EventPartnerFishbowlPanel_18", InviteKey = "UI_EventPartnerFishbowlPanel_17"; private ScrollViewItemInfo _info; private bool _isNew = true; public void Init(ScrollViewItemInfo info) { if (info.Type == EScrollViewType.Title) { Debug.Log( "[EventPartner] An item scrollViewCell is initiated with title info."); return; } _info = info; _playfabId = info.PlayfabId; textName.text = info.DisplayName; avatar.SetData(info.AvatarUrl); textLvl.text = info.Level.ToString(); btnNo.transform.parent.gameObject.SetActive(info.Type != EScrollViewType.Friend && info.Type != EScrollViewType.MyInvitation); textBtnYes.text = LocalizationMgr.GetText(info.Type == EScrollViewType.Partner2Accept ? AcceptKey : InviteKey); if (info.Type == EScrollViewType.MyInvitation) { btnYes.transform.parent.gameObject.SetActive(false); btnGrayGo.SetActive(true); } else //(info.Type == EScrollViewType.Partner2Accept) { btnYes.transform.parent.gameObject.SetActive(true); btnGrayGo.SetActive(false); } // btnYes.gameObject.SetActive(info.Type == EScrollViewType.Partner2Accept || !info.IsInvitationPending); // Debug.Log($"[EventPartner]{info.DisplayName}: {info.Type != EScrollViewType.Partner2Accept && info.IsInvitationPending}"); // btnGrayGo.SetActive(info.Type != EScrollViewType.Partner2Accept && info.IsInvitationPending); if (info.LastLoginTime.HasValue) textTime.text = ConvertTools.ConvertActiveTime(ZZTimeHelper.UtcNow() - info.LastLoginTime.Value); else { textTime.text = ""; Debug.Log($"[EventPartner]Fail to get last login time."); } timeGo.SetActive(info.Type == EScrollViewType.Friend && textTime.text != ""); textState.gameObject.SetActive(info.Type == EScrollViewType.MyInvitation && info.IsFull); if (!_isNew) return; _isNew = false; btnNo.onClick.AddListener(OnClickIgnore); btnYes.onClick.AddListener(info.Type == EScrollViewType.Partner2Accept ? OnClickAccept : OnClickInvite); } private void OnClickInvite() { EventPartnerAct.Ctx.EventAggregator.Publish(new EventPartnerClickInvite { Info = _info }); } private void OnClickAccept() { EventPartnerAct.Ctx.EventAggregator.Publish(new EventPartnerClickAccept { Info = _info }); } private void OnClickIgnore() { EventPartnerAct.Ctx.EventAggregator.Publish(new EventPartnerClickIgnore { Info = _info }); } public class ScrollViewItemInfo : IEquatable { public EScrollViewType Type; public string PlayfabId; public string AvatarUrl; public string DisplayName; public int Level; public bool IsFull = false; public string Title; public DateTime? LastLoginTime; #region EQ override public bool Equals(ScrollViewItemInfo other) { return Type == other.Type && PlayfabId == other.PlayfabId && Title == other.Title; } public override bool Equals(object obj) { return obj is ScrollViewItemInfo other && Equals(other); } public override int GetHashCode() { return HashCode.Combine((int)Type, PlayfabId, AvatarUrl, DisplayName, Level, Title, LastLoginTime); } #endregion } public enum EScrollViewType { Title, Recommendation, Friend, Partner2Accept, MyInvitation } } public class EventPartnerRemoveScrollViewItem { public EventPartnerScrollViewItem.ScrollViewItemInfo Info; } public class EventPartnerClickAccept { public EventPartnerScrollViewItem.ScrollViewItemInfo Info; } public class EventPartnerClickInvite { public EventPartnerScrollViewItem.ScrollViewItemInfo Info; } public class EventPartnerClickIgnore { public EventPartnerScrollViewItem.ScrollViewItemInfo Info; }