//--------------------------------------------------------
|
// [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<PlayerDetails.DetailType> funcTypes = new List<PlayerDetails.DetailType>();
|
|
FriendsModel m_FriendModel {
|
get {
|
return ModelCenter.Instance.GetModel<FriendsModel>();
|
}
|
}
|
FairyModel m_FairyModel {
|
get {
|
return ModelCenter.Instance.GetModel<FairyModel>();
|
}
|
}
|
RoleParticularModel m_RoleParticularModel {
|
get {
|
return ModelCenter.Instance.GetModel<RoleParticularModel>();
|
}
|
}
|
TeamModel m_TeamModel {
|
get {
|
return ModelCenter.Instance.GetModel<TeamModel>();
|
}
|
}
|
|
private float ratio = 1.0f;
|
|
public bool IsCrossServerPlayer {
|
get {
|
if (PlayerDetails.ServerGroupId == 0)
|
{
|
return false;
|
}
|
return PlayerDetails.ServerGroupId != PlayerDatas.Instance.baseData.ServerGroupId;
|
}
|
}
|
|
#region Built-in
|
protected override void BindController()
|
{
|
var _canva = WindowCenter.Instance.uiRoot.tipsCanvas.GetComponentInChildren<Canvas>();
|
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);
|
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.DetailType.ViewEquip);
|
funcTypes.Add(PlayerDetails.DetailType.LookFight);
|
|
|
if (!IsCrossServerPlayer && !CrossServerUtility.IsCrossServer())
|
{
|
funcTypes.Add(PlayerDetails.IsInTeam == 1 ?
|
PlayerDetails.DetailType.ApplyTeam : PlayerDetails.DetailType.InviteTeam);
|
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:
|
case PlayerDetails.OpenType.Friend:
|
if (IsCrossServerPlayer || CrossServerUtility.IsCrossServer())
|
{
|
return;
|
}
|
break;
|
case PlayerDetails.OpenType.Fairy:
|
break;
|
}
|
|
switch (PlayerDetails.openType)
|
{
|
case PlayerDetails.OpenType.Default:
|
if (PlayerDatas.Instance.fairyData.HasFairy)
|
{
|
if (PlayerDatas.Instance.fairyData.IsCanFunc(PlayerFairyData.LimitFunc.CanCall) &&
|
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);
|
}
|
if (PlayerDatas.Instance.fairyData.IsCanFunc(PlayerFairyData.LimitFunc.CanKick)
|
&& _mine.FamilyLV > _fairyMember.FamilyLV)
|
{
|
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:
|
if (!IsCrossServerPlayer)
|
{
|
m_RoleParticularModel.ViewRoleEquip(PlayerDetails.PlayerID);
|
}
|
else
|
{
|
m_RoleParticularModel.ViewCrossServerPlayerEquip(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<FairyDutyWin>();
|
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:
|
if (!IsCrossServerPlayer)
|
{
|
m_RoleParticularModel.ViewRoleFightPower(PlayerDetails.PlayerID);
|
}
|
else
|
{
|
m_RoleParticularModel.ViewCrossPlayerFightPower(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.text = Language.Get(StringUtility.Contact("PlayerDetail_", funcTypes[i]));
|
}
|
}
|
|
int Compare(PlayerDetails.DetailType x, PlayerDetails.DetailType y)
|
{
|
return x.CompareTo(y);
|
}
|
|
}
|
|
}
|