Files
back_cantanBuilding/Assets/Scripts/UI/Setting/PlayerHeadPopupPanel.cs
2026-05-26 16:15:54 +08:00

254 lines
8.1 KiB
C#

using asap.core;
using cfg;
using game;
using GameCore;
using System;
using System.Collections.Generic;
using TMPro;
using tysdk;
using UnityEngine;
using UnityEngine.UI;
public class PlayerHeadPopupPanel : MonoBehaviour
{
IUserService userService;
public Button btn_mask;
public Button btn_close;
public Head head;
public TMP_Text text_name;
public Button btn_name;
public Button btn_save;
public Transform content;
public GameObject item;
string url;
string headUrl;
int index;
List<HeadItem> platformHead = new List<HeadItem>();
List<HeadItem> headItems = new List<HeadItem>();
List<UserAvatar> userAvatars = new List<UserAvatar>();
HeadItem headItem_fb;
private void Awake()
{
userAvatars = GContext.container.Resolve<Tables>().TbUserAvatar.DataList;
userService = GContext.container.Resolve<IUserService>();
btn_mask = transform.Find("mask").GetComponent<Button>();
btn_close = transform.Find("btn_close").GetComponent<Button>();
head = transform.Find("root/btn_head").GetComponent<Head>();
text_name = transform.Find("root/btn_head/text_name").GetComponent<TMP_Text>();
btn_name = transform.Find("root/btn_head/text_name/btn_change").GetComponent<Button>();
btn_save = transform.Find("root/btn_save/btn_green").GetComponent<Button>();
content = transform.Find("root/ScrollView1/Viewport/Content/Item/panel_head").GetComponent<Transform>();
item = transform.Find("root/ScrollView1/Viewport/Content/Item/panel_head/head").gameObject;
GContext.container.Resolve<GuideDataCenter>().InspectTriggerGuide("PlayerHeadPopupPanel");
}
private void Start()
{
item.SetActive(false);
text_name.text = userService.DisplayName;
url = headUrl = userService.AvatarUrl;
btn_save.onClick.AddListener(OnClickSave);
btn_name.onClick.AddListener(OnClickName);
btn_mask.onClick.AddListener(OnClickClose);
btn_close.onClick.AddListener(OnClickClose);
index = 0;
platformHead = new List<HeadItem>();
#region facebookAvatar
GameObject head_fb = Instantiate(item, content);
head_fb.SetActive(true);
headItem_fb = head_fb.AddComponent<HeadItem>();
headItem_fb.SetSelected(false);
headItem_fb.SetUrlAsync("sp_avatar_33");
platformHead.Add(headItem_fb);
headItem_fb.onClick = OnBtnFacebook;
#endregion facebookAvatar
Dictionary<string, string> EAccoutUrl = userService.EAccoutUrl;
if (EAccoutUrl != null && EAccoutUrl.Count > 0)
{
//平台头像
if (EAccoutUrl.TryGetValue(EAccoutType.hwFacebook.ToString(), out string facebookAvatar))
{
headItem_fb.SetUrlAsync(facebookAvatar);
headItem_fb.SetSelected(url == facebookAvatar);
if (url == facebookAvatar)
{
index = -1;
}
headItem_fb.onClick = () => { ClickItem(-1, facebookAvatar); };
headItem_fb.transform.Find("tag_facebook").gameObject.SetActive(true);
}
}
else
{
index = 0;
}
for (int i = 0; i < userAvatars.Count; i++)
{
GameObject gameObject = Instantiate(item, content);
gameObject.SetActive(true);
HeadItem headItem = gameObject.AddComponent<HeadItem>();
headItem.SetSelected(false);
string avatar = userAvatars[i].Avatar;
int clickindex = i;
headItem.onClick = () => { ClickItem(clickindex, avatar); };
headItems.Add(headItem);
if (string.IsNullOrEmpty(headUrl))
{
if (userAvatars[i].ID == GContext.container.Resolve<Tables>().TbGlobalConfig.InitAvatar)
{
index = i;
}
}
else
{
if (userAvatars[i].Avatar == headUrl)
{
index = i;
}
}
}
if (index >= headItems.Count)
{
index = 0;
}
if (index >= 0)
{
headItems[index].SetSelected(true);
url = userAvatars[index].Avatar;
}
head.SetData(url);
for (int i = 0; i < userAvatars.Count; i++)
{
headItems[i].SetUrlAsync(userAvatars[i].Avatar);
}
}
async void OnClickName()
{
btn_name.enabled = false;
GameObject panel = await UIManager.Instance.GetUIAsync(UITypes.PlayerNamePopupPanel);
PlayerNamePopupPanel playerNamePopupPanel = panel.GetComponent<PlayerNamePopupPanel>();
//playerNamePopupPanel.inputField.text = text_name.text;
playerNamePopupPanel.Show(text_name);
btn_name.enabled = true;
}
void ClickItem(int _index, string avatar)
{
if (index == _index)
{
return;
}
if (index >= 0)
{
headItems[index].SetSelected(false);
}
else
{
platformHead[-index - 1].SetSelected(false);
}
index = _index;
if (index >= 0)
{
headItems[index].SetSelected(true);
}
else
{
platformHead[-index - 1].SetSelected(true);
}
url = avatar;
head.SetData(url);
}
void OnClickSave()
{
if (!string.IsNullOrEmpty(url) && headUrl != url)
{
userService.UpdateAvatarUrl(url);
ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_13"));
}
OnClickClose();
}
void OnClickClose()
{
UIManager.Instance.DestroyUI(UITypes.PlayerHeadPopupPanel);
}
async void OnBtnFacebook()
{
var result = await userService.LinkAccount(EAccoutType.hwFacebook);
if (result)
{
PlayFabMgr.Instance.UpdateUserDataValue(EAccoutType.hwFacebook.ToString(), "1");
Dictionary<string, string> EAccoutUrl = userService.EAccoutUrl;
if (EAccoutUrl != null && EAccoutUrl.Count > 0)
{
if (EAccoutUrl.TryGetValue(EAccoutType.hwFacebook.ToString(), out string facebookAvatar))
{
headItem_fb.SetUrlAsync(facebookAvatar);
headItem_fb.onClick = () => { ClickItem(-1, facebookAvatar); };
headItem_fb.transform.Find("tag_facebook").gameObject.SetActive(true);
}
}
GetReward();
}
}
void GetReward()
{
int rewardID = GContext.container.Resolve<Tables>().TbGlobalConfig.AccountLinkReward;
ItemData itemData = GContext.container.Resolve<PlayerItemData>().GetItemDataOne(rewardID);
GContext.container.Resolve<PlayerItemData>().AddItem(itemData);
GContext.Publish(new ShowData(itemData));
GContext.Publish(new ShowData());
GContext.container.Resolve<PlayerShopData>().GetSKUs();
}
}
class HeadItem : MonoBehaviour
{
public Image icon_head;
Button btn_head;
public GameObject selected;
GameObject loading;
public Action onClick;
private void Awake()
{
btn_head = GetComponent<Button>();
icon_head = transform.Find("mask/icon_head").GetComponent<Image>();
selected = transform.Find("selected").gameObject;
loading = transform.Find("loading").gameObject;
btn_head.onClick.AddListener(OnClick);
}
public void SetSelected(bool value)
{
selected.SetActive(value);
}
void OnClick()
{
if (loading.activeSelf)
{
ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_102"));
return;
}
if (onClick != null)
{
onClick();
}
}
public async void SetUrlAsync(string url)
{
if (!string.IsNullOrEmpty(url))
{
loading.SetActive(true);
await GContext.container.Resolve<IUIService>().SetHeadImage(icon_head, url);
if (loading != null)
{
loading.SetActive(false);
}
}
}
}