using System; using System.Collections.Generic; using MotionFramework; using TMPro; using UnityEngine; using UnityEngine.UI; using WXGame.Network; namespace DefaultNamespace.Component { public class MyFriendComponent : MonoBehaviour { [SerializeField] private Transform contentParent; [SerializeField] private GameObject friendItemPrefab; public Button closeBt; public Toggle[] Toggles; public GameObject[] games; public InputField inputField; public Button searchBt; public Transform addContentParent; public GameObject addFriendItemPrefab; public TMP_Text titleText; async void Start() { // 为每个Toggle添加事件监听器,修复闭包问题 for (int i = 0; i < Toggles.Length; i++) { // 创建局部变量捕获当前索引,避免闭包问题 int currentIndex = i; Toggles[i].onValueChanged.AddListener((value) => { // 只有当Toggle被激活时才执行逻辑,避免在自动设置为false时重复触发 games[currentIndex].SetActive(value); if (!value) { Debug.Log($"Toggle {Toggles[currentIndex].name} 被设置为false,跳过处理"); return; } Debug.Log($"Toggle {Toggles[currentIndex].name} 被激活,开始处理"); // 清理之前的好友项 ClearFriendItems(); // 确保索引在有效范围内 if (currentIndex >= 0 && currentIndex < Toggles.Length) { // 设置标题文本为当前Toggle的名称 titleText.text = Toggles[currentIndex].name; // // 确保游戏对象数组索引有效 // if (currentIndex < games.Length) // { // games[currentIndex].SetActive(value); // Debug.Log($"激活游戏对象: {currentIndex}"); // } // else // { // Debug.LogWarning($"游戏对象数组索引 {currentIndex} 超出范围,数组长度为 {games.Length}"); // } // 根据索引执行相应的逻辑 switch (currentIndex) { case 0: // 第一个Toggle - 好友 Debug.Log("执行获取好友列表逻辑 (索引: 0)"); GetFriendList(); break; case 1: // 第二个Toggle - 最近 Debug.Log("执行获取最近好友列表逻辑 (索引: 1)"); GetMyTalkFriend(); break; default: Debug.LogWarning($"未知的Toggle索引: {currentIndex},Toggle名称: {Toggles[currentIndex].name}"); break; } } else { Debug.LogWarning($"Toggle索引 {currentIndex} 超出范围,数组长度为 {Toggles.Length}"); } }); } searchBt.onClick.AddListener(delegate { SearchFriend(); }); closeBt.onClick.AddListener(delegate { UIManager.Instance.HidePopup("我的好友列表"); }); GetFriendList(); } /// /// 搜索好友 /// private async void SearchFriend() { // 检查输入是否为空 // if (string.IsNullOrEmpty(inputField.text)) // { // Debug.Log("请输入好友用户名"); // return; // } // 清理之前的搜索结果 ClearSearchResults(); try { Debug.Log($"开始搜索好友: {inputField.text}"); // 发送搜索请求 var result = await WebRequestManager.Instance.PostRequestAsync( url: Apis.GetSearchFriend(), signParams: new Dictionary() { { "keyword", inputField.text }, { "page", 1 } } ); if (result.ResponseCode == 200) { Debug.Log($"搜索好友请求成功!状态码: {result.ResponseCode}"); Debug.Log($"响应内容: {result.ResponseText}"); // 解析JSON响应 SearchFriendResponse searchResponse = JsonUtility.FromJson(result.ResponseText); if (searchResponse != null && searchResponse.code == 0) { Debug.Log($"搜索好友成功,找到 {searchResponse.data?.Length ?? 0} 个结果"); // 处理搜索结果 if (searchResponse.data != null && searchResponse.data.Length > 0) { Debug.Log($"开始创建 {searchResponse.data.Length} 个搜索结果项..."); foreach (var searchFriend in searchResponse.data) { // 实例化搜索好友项 var searchFriendItem = Instantiate(addFriendItemPrefab, addContentParent); searchFriendItem.SetActive(true); // 获取或添加SearchFriendItemComponent组件 var searchFriendItemComponent = searchFriendItem.GetComponent(); if (searchFriendItemComponent == null) { searchFriendItemComponent = searchFriendItem.AddComponent(); Debug.Log($"为搜索好友项 {searchFriend.user_username} 添加了SearchFriendItemComponent组件"); } // 初始化搜索好友项数据 searchFriendItemComponent.InitializeSearchFriendItem(searchFriend); Debug.Log($"搜索好友项创建完成: {searchFriend.user_username}, ID: {searchFriend.user_id}, 等级: {searchFriend.user_honor_level}, 已是好友: {searchFriend.have}"); } Debug.Log("所有搜索好友项创建完成"); } else { Debug.Log("未找到匹配的好友"); } } else { Debug.LogWarning($"搜索好友失败,状态码: {searchResponse?.code ?? -1}, 消息: {searchResponse?.msg ?? "未知错误"}"); } } else { Debug.LogError($"搜索好友请求失败: {result.ResponseCode}"); } } catch (System.Exception ex) { Debug.LogError($"搜索好友时发生异常: {ex.Message}"); } } /// /// 获取好友列表 /// private async void GetFriendList() { ClearFriendItems(); try { Debug.Log("开始获取好友列表..."); var friendResponse = await MotionEngine.GetModule().GetMyFriend(); // 检查响应状态码 if (friendResponse != null && friendResponse.code == 0) { Debug.Log($"成功获取好友列表,共 {friendResponse.data?.data?.Length ?? 0} 个好友"); Debug.Log($"当前页码: {friendResponse.data?.page ?? "未知"}, 总页数: {friendResponse.data?.allPage ?? 0}"); // 处理好友数据 if (friendResponse.data?.data != null && friendResponse.data.data.Length > 0) { Debug.Log($"开始创建 {friendResponse.data.data.Length} 个好友项..."); foreach (var friend in friendResponse.data.data) { // 实例化好友项 var friendItem = Instantiate(friendItemPrefab, contentParent); friendItem.SetActive(true); // 获取或添加FriendItemComponent组件 var friendItemComponent = friendItem.GetComponent(); if (friendItemComponent == null) { friendItemComponent = friendItem.AddComponent(); Debug.Log($"为好友项 {friend.user_username} 添加了FriendItemComponent组件"); } // 初始化好友项数据(异步下载头像) friendItemComponent.InitializeFriendItem(friend); Debug.Log($"好友项创建完成: {friend.user_username}, ID: {friend.friend_id}, 等级: {friend.user_honor_level}"); } Debug.Log("所有好友项创建完成,头像将异步下载"); } else { Debug.Log("当前没有好友"); } } else { Debug.LogWarning($"获取好友列表失败,状态码: {friendResponse?.code ?? -1}, 消息: {friendResponse?.msg ?? "未知错误"}"); } } catch (System.Exception ex) { Debug.LogError($"获取好友列表时发生异常: {ex.Message}"); } } /// /// 获取我的最近好友列表 /// private async void GetMyTalkFriend() { ClearFriendItems(); var result = await WebRequestManager.Instance.PostRequestAsync( url: Apis.GetMyTalkFriend(), signParams: new Dictionary() { { "page", "1" }, } ); FriendResponse friendResponse = JsonUtility.FromJson(result.ResponseText); if (friendResponse != null && friendResponse.code == 0) { Debug.Log($"成功获取好友列表,共 {friendResponse.data?.data?.Length ?? 0} 个好友"); Debug.Log($"当前页码: {friendResponse.data?.page ?? "未知"}, 总页数: {friendResponse.data?.allPage ?? 0}"); // 处理好友数据 if (friendResponse.data?.data != null && friendResponse.data.data.Length > 0) { Debug.Log($"开始创建 {friendResponse.data.data.Length} 个好友项..."); foreach (var friend in friendResponse.data.data) { // 实例化好友项 var friendItem = Instantiate(friendItemPrefab, contentParent); friendItem.SetActive(true); // 获取或添加FriendItemComponent组件 var friendItemComponent = friendItem.GetComponent(); if (friendItemComponent == null) { friendItemComponent = friendItem.AddComponent(); Debug.Log($"为好友项 {friend.user_username} 添加了FriendItemComponent组件"); } // 初始化好友项数据(异步下载头像) friendItemComponent.InitializeFriendItem(friend); Debug.Log($"好友项创建完成: {friend.user_username}, ID: {friend.friend_id}, 等级: {friend.user_honor_level}"); } Debug.Log("所有好友项创建完成,头像将异步下载"); } else { Debug.Log("当前没有好友"); } } else { Debug.LogWarning($"获取好友列表失败,状态码: {friendResponse?.code ?? -1}, 消息: {friendResponse?.msg ?? "未知错误"}"); } } private void ClearFriendItems() { // 清除所有子项 foreach (Transform child in contentParent.transform) { Destroy(child.gameObject); } } /// /// 清理搜索结果 /// private void ClearSearchResults() { if (addContentParent == null) { Debug.Log("搜索结果父容器未设置"); return; } try { Debug.Log("开始清理搜索结果..."); // 清除所有搜索结果子项 foreach (Transform child in addContentParent.transform) { if (child.gameObject.activeSelf) { Destroy(child.gameObject); } } Debug.Log("搜索结果清理完成"); } catch (System.Exception ex) { Debug.LogError($"清理搜索结果时发生异常: {ex.Message}"); } } } }