using System;
|
using System.Collections.Generic;
|
using UnityEngine.UI;
|
using UnityEngine;
|
using Snxxz.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<AddFriendTips>();
|
return _addTips;
|
}
|
}
|
|
private FuncConfigConfig _tagFuncModel;
|
//private ChatPanel _chatPnl;
|
public static GroupType _groupType = GroupType.None;
|
private FriendPlayer _lookFriendDetail;
|
private List<FriendPlayer> grouplist1 = new List<FriendPlayer>(); //最近联系人
|
private List<FriendPlayer> grouplist2 = new List<FriendPlayer>(); //好友
|
private List<FriendPlayer> grouplist3 = new List<FriendPlayer>(); //仇人
|
private List<FriendPlayer> grouplist4 = new List<FriendPlayer>(); //黑名单
|
private string _preToggleName = "";
|
|
FriendsModel _friendsModel;
|
FriendsModel friendsModel
|
{
|
get
|
{
|
return _friendsModel ?? (_friendsModel = ModelCenter.Instance.GetModel<FriendsModel>());
|
}
|
}
|
|
[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<uint, FriendPlayer> 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<uint, FriendPlayer> _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<Toggle>().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>();
|
Text friendLv = cell.transform.Find("Contain_LV/PlayerLv").GetComponent<Text>();
|
Image friendLvIcon = cell.transform.Find("Contain_LV/PlayerLvIcon").GetComponent<Image>();
|
Text isOnline = cell.transform.Find("OnText").GetComponent<Text>();
|
Image titleIcon = cell.transform.Find("titleImage").GetComponent<Image>();
|
Image pictureIcon = cell.transform.Find("Picture/ChatIcon").GetComponent<Image>();
|
pictureIcon.SetSprite(GeneralDefine.GetOtherJobHeadPortrait(data.Job,0));
|
int nirvanaLv = data.LV - friendsModel.OpenGreatLV;
|
if (nirvanaLv > 0)
|
{
|
friendLvIcon.gameObject.SetActive(true);
|
friendLv.text = nirvanaLv.ToString();
|
}
|
else
|
{
|
friendLvIcon.gameObject.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.gameObject.SetActive(true);
|
titleIcon.SetSprite(realmModel.Img);
|
friendName.transform.localPosition = existRealmPos;
|
}
|
else
|
{
|
titleIcon.gameObject.SetActive(false);
|
friendName.transform.localPosition = noExistRealmPos;
|
}
|
|
|
friendName.text = data.PlayerName;
|
|
Button detailBtn = cell.transform.Find("OnLiveBth").GetComponent<Button>();
|
detailBtn.onClick.RemoveAllListeners();
|
detailBtn.onClick.AddListener(() => { OnClickDetailBtn(data); });
|
|
Toggle toggleCell = cell.GetComponent<Toggle>();
|
toggleCell.isOn = false;
|
toggleCell.onValueChanged.RemoveAllListeners();
|
|
if (isFirstPlayer)
|
{
|
toggleCell.isOn = true;
|
OnItemClick(true, data, cell.index);
|
isFirstPlayer = false;
|
}
|
else
|
{
|
if (curPlayerID == data.PlayerID)
|
{
|
toggleCell.isOn = true;
|
OnItemClick(true, data, cell.index);
|
}
|
}
|
toggleCell.onValueChanged.AddListener((bool isOn) => { OnItemClick(isOn, data, cell.index); });
|
}
|
|
#region 按钮事件
|
|
private void RefreshTitleColor(GroupType type)
|
{
|
recentTitleText.color = titleUnSelectColor;
|
_recentContactNumText.color = titleUnSelectColor;
|
friendTitleText.color = titleUnSelectColor;
|
_friendNumText.color = titleUnSelectColor;
|
enemyTitleText.color = titleUnSelectColor;
|
_enemyNumText.color = titleUnSelectColor;
|
balckTitleText.color = titleUnSelectColor;
|
_balcklistNumText.color = titleUnSelectColor;
|
addFriendTitleText.color = titleUnSelectColor;
|
|
switch (type)
|
{
|
case GroupType.RecentContact:
|
recentTitleText.color = titleSelectColor;
|
_recentContactNumText.color = titleSelectColor;
|
break;
|
case GroupType.Friend:
|
friendTitleText.color = titleSelectColor;
|
_friendNumText.color = titleSelectColor;
|
break;
|
case GroupType.Enemy:
|
enemyTitleText.color = titleSelectColor;
|
_enemyNumText.color = titleSelectColor;
|
break;
|
case GroupType.Balcklist:
|
balckTitleText.color = titleSelectColor;
|
_balcklistNumText.color = titleSelectColor;
|
break;
|
case GroupType.AddFriend:
|
addFriendTitleText.color = titleSelectColor;
|
break;
|
}
|
}
|
|
private void OnClickAddFriendToggle(bool isOn)
|
{
|
if (isOn)
|
{
|
RefreshTitleColor(GroupType.AddFriend);
|
if (IsReFresh(GroupType.AddFriend))
|
{
|
isFirstPlayer = true;
|
_chatFrame.SetActive(false);
|
AddTips.gameObject.SetActive(true);
|
//_chatPnl.SetChatCompActive(false);
|
AddTips.OnInit();
|
}
|
AddTips.FriendListUICtrl(true);
|
}
|
}
|
|
private void OnClickBacklistToggle(bool isOn)
|
{
|
if (isOn)
|
{
|
RefreshTitleColor(GroupType.Balcklist);
|
if (IsReFresh(GroupType.Balcklist))
|
{
|
isFirstPlayer = true;
|
_chatFrame.SetActive(true);
|
AddTips.gameObject.SetActive(false);
|
//_chatPnl.SetChatCompActive(true);
|
OnRefreshUI();
|
}
|
RefreshFriendlistUI(ChatCtrl.Inst.IsExtentOpen);
|
}
|
|
}
|
|
private void OnClickEnemyToggle(bool isOn)
|
{
|
if (isOn)
|
{
|
RefreshTitleColor(GroupType.Enemy);
|
if (IsReFresh(GroupType.Enemy))
|
{
|
isFirstPlayer = true;
|
_chatFrame.SetActive(true);
|
AddTips.gameObject.SetActive(false);
|
//_chatPnl.SetChatCompActive(true);
|
OnRefreshUI();
|
}
|
|
RefreshFriendlistUI(ChatCtrl.Inst.IsExtentOpen);
|
}
|
|
}
|
|
private void OnClickFriendToggle(bool isOn)
|
{
|
if (isOn)
|
{
|
RefreshTitleColor(GroupType.Friend);
|
if (IsReFresh(GroupType.Friend))
|
{
|
isFirstPlayer = true;
|
_chatFrame.SetActive(true);
|
AddTips.gameObject.SetActive(false);
|
//_chatPnl.SetChatCompActive(true);
|
OnRefreshUI();
|
}
|
RefreshFriendlistUI(ChatCtrl.Inst.IsExtentOpen);
|
}
|
}
|
|
private void OnClickContactToggle(bool isOn)
|
{
|
if (isOn)
|
{
|
RefreshTitleColor(GroupType.RecentContact);
|
if (IsReFresh(GroupType.RecentContact))
|
{
|
isFirstPlayer = true;
|
_chatFrame.SetActive(true);
|
AddTips.gameObject.SetActive(false);
|
//_chatPnl.SetChatCompActive(true);
|
OnRefreshUI();
|
}
|
RefreshFriendlistUI(ChatCtrl.Inst.IsExtentOpen);
|
|
}
|
|
}
|
|
public bool IsReFresh(GroupType type)
|
{
|
if (_groupType == type)
|
{
|
return false;
|
}
|
else
|
{
|
_groupType = type;
|
return true;
|
}
|
|
}
|
|
private void OnClickDetailBtn(FriendPlayer data)
|
{
|
Debug.Log("OnClickDetailBtn");
|
_lookFriendDetail = data;
|
PlayerDetails.ShowPlayerDetails((int)data.PlayerID, null);
|
}
|
|
private void OnItemClick(bool isOn, FriendPlayer data, int index)
|
{
|
if (isOn)
|
{
|
curPlayerID = (int)data.PlayerID;
|
_speakToName.text = Language.Get("Friend107", UIHelper.ServerStringTrim(data.PlayerName));
|
ChatCtrl.Inst.PteChatID = (int)data.PlayerID;
|
ChatCtrl.Inst.PteChatName = data.PlayerName;
|
LanguageVerify.toPlayerLevel = data.LV;
|
}
|
}
|
|
#endregion
|
|
public void FriendListUICtrl(bool isShow)
|
{
|
_friendCtrl.mScrollRect.gameObject.SetActive(isShow);
|
curGroupGo.SetActive(isShow);
|
friendlistBG.SetActive(isShow);
|
friendsModel.RefreshFriendlistUI(isShow);
|
}
|
|
public void OnHideOrShow()
|
{
|
//_chatPnl.CloseFriendTalk();
|
|
}
|
}
|