Files
ft/Client/Assets/Scripts/UI/Social/SocialFriendItem.cs
2026-06-29 21:18:33 +08:00

141 lines
4.2 KiB
C#

using asap.core;
using game;
using GameCore;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class SocialFriendItem : PanelItemBase<SocialFriendItemData>
{
public GameObject bg_myself;
List<GameObject> rank = new List<GameObject>();
public TMP_Text text_rank;
public TMP_Text text_name;
public Head head;
public TMP_Text lv_text_count;
public TMP_Text infiniteBuildingLevel_text_count;
public GameObject icon_skyscraper;
[SerializeField]
private GameObject moreOption;
public static GameObject activeMoreOption;
[SerializeField]
private Button moreOptionBtn;
[SerializeField]
private Button deleteBtn;
[SerializeField]
private Button moreOptionCloseBtn;
string playFabId;
bool isInit;
void InitPanel()
{
Transform rank_panel = transform.Find("rank");
rank.Clear();
for (int i = 0; i < rank_panel.childCount; i++)
{
rank.Add(rank_panel.GetChild(i).gameObject);
}
moreOptionBtn.onClick.AddListener(OnMoreOptionClicked);
deleteBtn.onClick.AddListener(OnDeleteClicked);
moreOptionCloseBtn.onClick.AddListener(OnMoreOptionCloseClicked);
isInit = true;
}
public override void OnInit()
{
if (!isInit)
{
InitPanel();
}
IUserService userService = GContext.container.Resolve<IUserService>();
playFabId = data.playFabId;
bg_myself.SetActive(data.playFabId == userService.UserId);
moreOptionBtn.gameObject.SetActive(data.playFabId != userService.UserId);
for (int i = 0; i < rank.Count - 1; i++)
{
rank[i].SetActive(data.rank == i + 1);
}
rank[^1].SetActive(data.rank >= rank.Count);
text_rank.text = data.rank.ToString();
lv_text_count.text = data.lv.ToString();
infiniteBuildingLevel_text_count.text = data.infiniteBuildingLevel.ToString();
if (data.infiniteBuildingLevel > 0)
{
if (icon_skyscraper != null)
{
icon_skyscraper.SetActive(true);
}
}
else
{
if (icon_skyscraper != null)
{
icon_skyscraper.SetActive(false);
}
}
text_name.text = data.displayName;
head.SetData(data.avatarUrl);
}
private void OnMoreOptionClicked()
{
if(activeMoreOption != moreOption)
{
activeMoreOption?.SetActive(false);
activeMoreOption = moreOption;
}
activeMoreOption.SetActive(!activeMoreOption.activeSelf);
}
private void OnMoreOptionCloseClicked()
{
activeMoreOption?.SetActive(false);
activeMoreOption = null;
moreOption.SetActive(false);
}
private async void OnDeleteClicked()
{
string title = LocalizationMgr.GetText("UI_FishingSocialPanel_52");
string info = LocalizationMgr.GetText("UI_FishingSocialPanel_53");
string l_Label = LocalizationMgr.GetText("UI_COMMON_cancel");
string r_label = LocalizationMgr.GetText("UI_FishingSocialPanel_31");
GameObject go = await UIManager.Instance.ShowUI(UITypes.NoticeConfirmPopupPanel);
var noticeConfirmPopupPanel = go.GetComponent<NoticeConfirmPopupPanel>();
noticeConfirmPopupPanel.Init(2, title, info, OnDeleteCancel, OnDeleteConfirm, OnDeleteCancel,l_Label, r_label, true);
}
private void OnDeleteCancel()
{
moreOption.SetActive(false);
}
private async void OnDeleteConfirm()
{
moreOption.SetActive(false);
var service = GContext.container.Resolve<FriendService>();
GameCore.UIManager.ShowWaitingBlock("SocialFriendItemData::Delete");
var success = await service.DeleteFriend(playFabId);
GameCore.UIManager.HideWaitingBlock("SocialFriendItemData::Delete");
ToastPanel.Show(LocalizationMgr.GetText(success ? "UI_ToastPanel_112" : "UI_ToastPanel_113"));
}
}
public class SocialFriendItemData
{
public int rank;
public int lv = 1;
public int infiniteBuildingLevel = 0;
public string playFabId;
public string displayName;
public string avatarUrl;
}