//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, September 11, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class PlayerDetailWin : Window { [SerializeField] Transform m_ContainerDetail; [SerializeField] Text m_PlayerTxt; [SerializeField] Text m_PlayerLevelTxt; [SerializeField] Image m_LevelSign; [SerializeField] ScrollerController m_Controller; [SerializeField, Header("至多显示的个数")] int m_AdaptiveCount = 6; private List funcTypes = new List(); FriendsModel m_FriendModel { get { return ModelCenter.Instance.GetModel(); } } FairyModel m_FairyModel { get { return ModelCenter.Instance.GetModel(); } } RoleParticularModel m_RoleParticularModel { get { return ModelCenter.Instance.GetModel(); } } TeamModel m_TeamModel { get { return ModelCenter.Instance.GetModel(); } } private float ratio = 1.0f; #region Built-in protected override void BindController() { var _canva = WindowCenter.Instance.uiRoot.tipsCanvas.GetComponentInChildren(); if (_canva != null) { ratio = _canva.scaleFactor; } } protected override void AddListeners() { m_Controller.OnRefreshCell += OnRefreshDetailCell; } protected override void OnPreOpen() { } protected override void OnActived() { base.OnActived(); ShowPlayerDetail(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } #endregion public void ShowPlayerDetail() { m_ContainerDetail.localPosition = PlayerDetails.targetPos; m_PlayerTxt.text = UIHelper.ServerStringTrim(PlayerDetails.PlayerName); if (PlayerDetails.LV > GeneralConfig.Instance.greatMasterStartLV) { m_LevelSign.gameObject.SetActive(true); m_PlayerLevelTxt.text = (PlayerDetails.LV - GeneralConfig.Instance.greatMasterStartLV).ToString(); } else { m_LevelSign.gameObject.SetActive(false); m_PlayerLevelTxt.text = Language.Get("PlayerDetail_Level", PlayerDetails.LV); } CheckDetailType(); OnPlayerDetailRefresh(); var _rt = m_ContainerDetail as RectTransform; var _num = Mathf.Min(funcTypes.Count, m_AdaptiveCount); var _height = 90 + _num * m_Controller.m_CellNomalPrefab.height + (_num - 1) * m_Controller.m_Scorller.spacing; _rt.sizeDelta = _rt.sizeDelta.SetY(_height); CheckPlayerDetailPosition(_height); } private void CheckPlayerDetailPosition(float _height) { var _rt = m_ContainerDetail as RectTransform; _height = _height * ratio; float _width = _rt.sizeDelta.x * ratio; Vector3 pos = m_ContainerDetail.localPosition; if (Mathf.Abs(pos.y - _height) > Screen.height / 2) { pos.y = (_height - Screen.height / 2) / ratio; } if (Mathf.Abs(pos.x - _width) > Screen.width / 2) { pos.x = _width - Screen.width / 2; } m_ContainerDetail.localPosition = pos; } public void CheckDetailType() { funcTypes.Clear(); funcTypes.Add(PlayerDetails.IsInTeam == 1 ? PlayerDetails.DetailType.ApplyTeam : PlayerDetails.DetailType.InviteTeam); funcTypes.Add(PlayerDetails.DetailType.ViewEquip); funcTypes.Add(PlayerDetails.DetailType.LookFight); bool _isFriend = m_FriendModel.GetFirendInfo((uint)PlayerDetails.PlayerID, 2) != null; bool _isBlack = m_FriendModel.GetFirendInfo((uint)PlayerDetails.PlayerID, 4) != null; funcTypes.Add(_isFriend ? PlayerDetails.DetailType.DeleteFriend : PlayerDetails.DetailType.AddFriend); funcTypes.Add(_isBlack ? PlayerDetails.DetailType.RemoveBlack : PlayerDetails.DetailType.AddBlack); if (!_isBlack) { funcTypes.Add(PlayerDetails.DetailType.PrivateChat); } switch (PlayerDetails.openType) { case PlayerDetails.OpenType.Default: if (PlayerDatas.Instance.fairyData.HasFairy) { if (PlayerDatas.Instance.fairyData.IsCanFunc(PlayerFairyData.LimitFunc.CanKick) && PlayerDatas.Instance.fairyData.GetMember(PlayerDetails.PlayerID) == null) { funcTypes.Add(PlayerDetails.DetailType.InviteFairy); } } break; case PlayerDetails.OpenType.Fairy: PlayerFairyData.FairyMember _mine = PlayerDatas.Instance.fairyData.mine; PlayerFairyData.FairyMember _fairyMember = PlayerDatas.Instance.fairyData.GetMember(m_FairyModel.presentChangeMember); if (_fairyMember != null) { if (PlayerDatas.Instance.fairyData.IsCanFunc(PlayerFairyData.LimitFunc.CanJobTitle) && _mine.FamilyLV > _fairyMember.FamilyLV) { funcTypes.Add(PlayerDetails.DetailType.FairyLv); funcTypes.Add(PlayerDetails.DetailType.KickFairy); } } break; case PlayerDetails.OpenType.Friend: funcTypes.Remove(PlayerDetails.DetailType.PrivateChat); break; } } private void OnPlayerDetailRefresh() { m_Controller.Refresh(); funcTypes.Sort(Compare); for (int i = 0; i < funcTypes.Count; i++) { m_Controller.AddCell(ScrollerDataType.Normal, i, OnFucnClick); } m_Controller.Restart(); } private void OnFucnClick(CellView cell) { CloseImmediately(); int i = cell.index; switch (funcTypes[i]) { case PlayerDetails.DetailType.PrivateChat: if (PlayerDetails.OnlineType != 1) { SysNotifyMgr.Instance.ShowTip("Friend_OffLine"); break; } if (PlayerDetails.PlayerID != 0) { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Friend)) { FuncOpen.Instance.ProcessorFuncErrorTip((int)FuncOpenEnum.Friend); break; } m_FriendModel.SetPlayerShortInfo((uint)PlayerDetails.PlayerID, PlayerDetails.PlayerName, (byte)PlayerDetails.Job, (ushort)PlayerDetails.LV, (ushort)PlayerDetails.RealmLV, (byte)PlayerDetails.OnlineType, PlayerDetails.openType == PlayerDetails.OpenType.Fairy); PlayerDetails.OnClickFunc(funcTypes[i]); } break; case PlayerDetails.DetailType.ViewEquip: m_RoleParticularModel.ViewRoleEquip(PlayerDetails.PlayerID); break; case PlayerDetails.DetailType.AddFriend: m_FriendModel.OnClickAddFriend((uint)PlayerDetails.PlayerID); break; case PlayerDetails.DetailType.DeleteFriend: m_FriendModel.OnClickDeleteFriend((uint)PlayerDetails.PlayerID); break; case PlayerDetails.DetailType.AddBlack: m_FriendModel.OnClickAddBlack((uint)PlayerDetails.PlayerID); break; case PlayerDetails.DetailType.AddTeam: break; case PlayerDetails.DetailType.FairyLv: WindowCenter.Instance.Open(); break; case PlayerDetails.DetailType.KickFairy: m_FairyModel.SendKickFairy((uint)PlayerDetails.PlayerID); break; case PlayerDetails.DetailType.ApplyTeam: if (m_TeamModel.myTeam.GetIndexOfMember(PlayerDetails.PlayerID) != -1) { SysNotifyMgr.Instance.ShowTip("AlreadyInTeam"); break; } if (m_TeamModel.myTeam.inTeam) { ConfirmCancel.ShowPopConfirm( "", Language.Get("PlayerJoinTeam_1"), (bool _ok) => { if (_ok) { m_TeamModel.RequestExitTeam(); m_TeamModel.RequestApplyForJoin(PlayerDetails.PlayerID); } } ); } else { m_TeamModel.RequestApplyForJoin(PlayerDetails.PlayerID); } break; case PlayerDetails.DetailType.InviteTeam: m_TeamModel.RequestInviteJoinTeam(PlayerDetails.PlayerID); break; case PlayerDetails.DetailType.RemoveBlack: m_FriendModel.OnClickRemoveBlack((uint)PlayerDetails.PlayerID); break; case PlayerDetails.DetailType.LookFight: m_RoleParticularModel.ViewRoleFightPower(PlayerDetails.PlayerID); break; case PlayerDetails.DetailType.InviteFairy: m_FairyModel.SendInviteFairy(PlayerDetails.PlayerID, PlayerDetails.PlayerName); break; } } private void OnRefreshDetailCell(ScrollerDataType type, CellView cell) { int i = cell.index; if (i < funcTypes.Count) { Text text = cell.transform.Find("Text").GetComponent(); text.text = Language.Get(StringUtility.Contact("PlayerDetail_", funcTypes[i])); } } int Compare(PlayerDetails.DetailType x, PlayerDetails.DetailType y) { return x.CompareTo(y); } } }