using System; using System.Collections.Generic; using UnityEngine.UI; using UnityEngine; using vnxbqy.UI; public class FriendPanel : MonoBehaviour { [SerializeField] private ScrollerController _friendCtrl; [SerializeField] private ToggleGroup _friendGroup; [SerializeField] private Toggle _recentContactToggle; //最近联系人 [SerializeField] private Toggle _friendToggle; //好友 [SerializeField] private Toggle _enemyToggle; //仇人 [SerializeField] private Toggle _balcklistToggle; //黑名单 [SerializeField] private Toggle _addFriendToggle; //添加好友 [SerializeField] Text recentTitleText; [SerializeField] Text friendTitleText; [SerializeField] Text enemyTitleText; [SerializeField] Text balckTitleText; [SerializeField] Text addFriendTitleText; [SerializeField] private Text _recentContactNumText; [SerializeField] private Text _friendNumText; [SerializeField] private Text _enemyNumText; [SerializeField] private Text _balcklistNumText; [SerializeField] private Text curGroupText; [SerializeField] private GameObject curGroupGo; [SerializeField] private GameObject friendlistBG; [SerializeField] private GameObject _chatFrame; [SerializeField] private Text _speakToName; [SerializeField] private GameObject _speakToNameObject; public int curPlayerID = 0; private bool isFirstPlayer = true; private AddFriendTips _addTips; public AddFriendTips AddTips { get { if (_addTips == null) _addTips = transform.Find("FrendBG/AddFriend").GetComponent(); return _addTips; } } private FuncConfigConfig _tagFuncModel; //private ChatPanel _chatPnl; public static GroupType _groupType = GroupType.None; private FriendPlayer _lookFriendDetail; private List grouplist1 = new List(); //最近联系人 private List grouplist2 = new List(); //好友 private List grouplist3 = new List(); //仇人 private List grouplist4 = new List(); //黑名单 private string _preToggleName = ""; FriendsModel _friendsModel; FriendsModel friendsModel { get { return _friendsModel ?? (_friendsModel = ModelCenter.Instance.GetModel()); } } [SerializeField] [Header("不存在境界时的位置")] Vector3 noExistRealmPos = new Vector3(-15, 15, 0); [SerializeField] [Header("存在境界时的位置")] Vector3 existRealmPos = new Vector3(58, 15, 0); Color32 titleUnSelectColor = new Color32(237,161,13,255); Color32 titleSelectColor = new Color32(255, 244,205,255); private void Awake() { _friendCtrl.OnRefreshCell += OnRefreshFriendCell; } //public void OnInit(ChatPanel inst) //{ // _chatPnl = inst; //} private void OnEnable() { //if (_chatPnl == null) // return; _friendCtrl.vertical = true; _preToggleName = ""; friendsModel.OnSendCA9A3_tagCGQueryRecommendFriends(); AddTips.IsRecommend = true; OnRefreshFriendNumber(); isFirstPlayer = true; curPlayerID = 0; _recentContactToggle.isOn = true; _friendToggle.isOn = false; _enemyToggle.isOn = false; _balcklistToggle.isOn = false; _addFriendToggle.isOn = false; _recentContactToggle.RemoveAllListeners(); _friendToggle.RemoveAllListeners(); _enemyToggle.RemoveAllListeners(); _balcklistToggle.RemoveAllListeners(); _addFriendToggle.RemoveAllListeners(); switch (_groupType) { case GroupType.None: OnClickContactToggle(true); break; case GroupType.RecentContact: OnClickContactToggle(true); break; case GroupType.Friend: OnClickFriendToggle(true); break; case GroupType.Enemy: OnClickEnemyToggle(true); break; case GroupType.Balcklist: OnClickBacklistToggle(true); break; case GroupType.AddFriend: OnClickAddFriendToggle(true); break; } _recentContactToggle.onValueChanged.AddListener((bool isOn) => { OnClickContactToggle(isOn); }); _friendToggle.onValueChanged.AddListener((bool isOn) => { OnClickFriendToggle(isOn); }); _enemyToggle.onValueChanged.AddListener((bool isOn) => { OnClickEnemyToggle(isOn); }); _balcklistToggle.onValueChanged.AddListener((bool isOn) => { OnClickBacklistToggle(isOn); }); _addFriendToggle.onValueChanged.AddListener((bool isOn) => { OnClickAddFriendToggle(isOn); }); ChatCtrl.Inst.OnClickCloseChatEvent += CloseFriendlist; ChatCtrl.Inst.OnChatExtentOpenEvent += RefreshFriendlistUI; friendsModel.RefreshFriendModel += RefreshFriendInfo; friendsModel.RefreshFriendCntEvent += RefreshFriendCnt; RefreshFriendlistUI(ChatCtrl.Inst.IsExtentOpen); } private void OnDisable() { _groupType = GroupType.None; ChatCtrl.Inst.OnClickCloseChatEvent -= CloseFriendlist; ChatCtrl.Inst.OnChatExtentOpenEvent -= RefreshFriendlistUI; friendsModel.RefreshFriendCntEvent -= RefreshFriendCnt; friendsModel.RefreshFriendModel -= RefreshFriendInfo; _recentContactToggle.RemoveAllListeners(); _friendToggle.RemoveAllListeners(); _enemyToggle.RemoveAllListeners(); _balcklistToggle.RemoveAllListeners(); _addFriendToggle.RemoveAllListeners(); } private void CloseFriendlist() { FriendListUICtrl(false); } private void RefreshFriendlistUI(bool isOpenChatExtent) { if (!friendlistBG.activeSelf && isOpenChatExtent) { return; } FriendListUICtrl(!isOpenChatExtent); } private void RefreshFriendCnt(GroupType type, bool addFriendPlayer) { if (_groupType == type) { isFirstPlayer = true; if (!addFriendPlayer) { OnRefreshUI(); } } OnRefreshFriendNumber(); } private void RefreshFriendInfo() { OnRefreshUI(); } public void OnRefreshUI() { _speakToName.text = ""; OnRefreshModel((byte)_groupType); switch (_groupType) { case GroupType.RecentContact: curGroupText.text = Language.Get("ChatPanel_RecentContactName_1"); break; case GroupType.Friend: curGroupText.text = Language.Get("ChatPanel_FriendName_1"); break; case GroupType.Enemy: curGroupText.text = Language.Get("ChatPanel_EnemyName_1"); break; case GroupType.Balcklist: curGroupText.text = Language.Get("ChatPanel_BlacklistName_1"); break; } } public void OnRefreshModel(byte groupType) { Dictionary friendInfoDict = friendsModel.GetFriendInfoDict(groupType); _speakToNameObject.SetActive(true); _friendCtrl.Refresh(); if (groupType == (int)GroupType.RecentContact) { if (friendsModel.tempFriendData != null) { _friendCtrl.AddCell(ScrollerDataType.Header, (int)friendsModel.tempFriendData.PlayerID); } } if (friendInfoDict != null && friendInfoDict.Count > 0) { foreach (var key in friendInfoDict.Keys) { if (groupType == (int)GroupType.RecentContact) { if (friendsModel.tempFriendData != null) { if (key != friendsModel.tempFriendData.PlayerID) { _friendCtrl.AddCell(ScrollerDataType.Header, (int)key); } } else { _friendCtrl.AddCell(ScrollerDataType.Header, (int)key); } } else { _friendCtrl.AddCell(ScrollerDataType.Header, (int)key); } } } else { if (friendsModel.tempFriendData == null) { _speakToNameObject.SetActive(false); ChatCtrl.Inst.PteChatID = 0; ChatCtrl.Inst.PteChatName = string.Empty; LanguageVerify.toPlayerLevel = 0; } } _friendCtrl.Restart(); } private int _recentNum = 0; private int _friendNum = 0; private int _enemyNum = 0; private int _balcklistNum = 0; private Dictionary _friendPlayerDict; //刷新所有群组人物数量 public void OnRefreshFriendNumber() { _recentNum = 0; _friendNum = 0; _enemyNum = 0; _balcklistNum = 0; _tagFuncModel = FuncConfigConfig.Get("ContactsMaxCnt"); _friendPlayerDict = friendsModel.GetFriendDictByType((byte)GroupType.RecentContact); if (friendsModel.tempFriendData != null) { _recentNum += 1; } if (_friendPlayerDict != null) { _recentNum += _friendPlayerDict.Count; if (friendsModel.tempFriendData != null) { if (_friendPlayerDict.ContainsKey(friendsModel.tempFriendData.PlayerID)) { _recentNum -= 1; } } } _recentContactNumText.text = "(" + _recentNum + "/ " + _tagFuncModel.Numerical1 + ")"; _tagFuncModel = FuncConfigConfig.Get("FriendMaxCnt"); _friendPlayerDict = friendsModel.GetFriendInfoDict((byte)GroupType.Friend); if (_friendPlayerDict != null) _friendNum = _friendPlayerDict.Count; _friendNumText.text = "(" + _friendNum + "/ " + _tagFuncModel.Numerical1 + ")"; _tagFuncModel = FuncConfigConfig.Get("EnemiesMaxCnt"); _friendPlayerDict = friendsModel.GetFriendInfoDict((byte)GroupType.Enemy); if (_friendPlayerDict != null) _enemyNum = _friendPlayerDict.Count; _enemyNumText.text = "(" + _enemyNum + "/ " + _tagFuncModel.Numerical1 + ")"; _tagFuncModel = FuncConfigConfig.Get("BlacklistMaxCnt"); _friendPlayerDict = friendsModel.GetFriendInfoDict((byte)GroupType.Balcklist); if (_friendPlayerDict != null) _balcklistNum = _friendPlayerDict.Count; _balcklistNumText.text = "(" + _balcklistNum + "/ " + _tagFuncModel.Numerical1 + ")"; } private void OnRefreshFriendCell(ScrollerDataType type, CellView cell) { cell.GetComponent().group = _friendGroup; FriendPlayer data = friendsModel.GetFirendInfo((uint)cell.index, (byte)_groupType); if (data == null) { if (friendsModel.tempFriendData == null) return; else data = friendsModel.tempFriendData; } Text friendName = cell.transform.Find("PlayerName").GetComponent(); Text friendLv = cell.transform.Find("Contain_LV/PlayerLv").GetComponent(); Image friendLvIcon = cell.transform.Find("Contain_LV/PlayerLvIcon").GetComponent(); Text isOnline = cell.transform.Find("OnText").GetComponent(); Image titleIcon = cell.transform.Find("titleImage").GetComponent(); Image pictureIcon = cell.transform.Find("Picture/ChatIcon").GetComponent(); pictureIcon.SetSprite(GeneralDefine.GetOtherJobHeadPortrait(data.Job,0)); int nirvanaLv = data.LV - friendsModel.OpenGreatLV; if (nirvanaLv > 0) { friendLvIcon.SetActive(true); friendLv.text = nirvanaLv.ToString(); } else { friendLvIcon.SetActive(false); friendLv.text = data.LV.ToString(); } isOnline.text = friendsModel.GetOnlineType(data.OnlineType); RealmConfig realmModel = RealmConfig.Get(data.RealmLV); if (data.RealmLV > 0 && RealmConfig.Has(data.RealmLV)) { titleIcon.SetActive(true); titleIcon.SetSprite(realmModel.Img); friendName.transform.localPosition = existRealmPos; } else { titleIcon.SetActive(false); friendName.transform.localPosition = noExistRealmPos; } friendName.text = data.PlayerName; Button detailBtn = cell.transform.Find("OnLiveBth").GetComponent