//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Tuesday, October 17, 2017
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using UnityEngine.UI;
|
|
using System;
|
|
namespace vnxbqy.UI
|
{
|
|
public class MyTeammateBehaviour : MonoBehaviour
|
{
|
[SerializeField] int m_Index = 0;
|
[SerializeField] Transform m_Matching;
|
[SerializeField] Transform m_TeammateInfo;
|
[SerializeField] AvatarCell avatarCell;
|
[SerializeField] Image m_Realm;
|
[SerializeField] Text m_PlayerName;
|
[SerializeField] Text m_Job;
|
[SerializeField] Image m_LevelSign;
|
[SerializeField] Text m_Level;
|
[SerializeField] Text m_Position;
|
[SerializeField] FontColorSizeConfig m_FontColorSize;
|
[SerializeField] Button m_Interact;
|
[SerializeField] Button m_Exit;
|
[SerializeField] Button m_Kickout;
|
[SerializeField] TeammateInteractPanel m_InteractPanel;
|
[SerializeField] RectTransform m_SelfBackGround;
|
[SerializeField] RectTransform m_SelfSign;
|
[SerializeField] RectTransform m_SelectedSign;
|
|
TeamModel model { get { return ModelCenter.Instance.GetModel<TeamModel>(); } }
|
|
Teammate teammate;
|
public void Display()
|
{
|
model.teammateChangeMapEvent -= OnPositionChange;
|
model.teammateOnOffLineEvent -= OnTeammateOnOffLine;
|
model.matchingStateChangeEvent -= OnMatchMember;
|
model.teammateLevelUpEvent -= OnTeammateLevelUp;
|
|
if (model.myTeam.TryGetMember(m_Index, out teammate))
|
{
|
DisplayTeammate(teammate);
|
|
var isMySelf = teammate.id == PlayerDatas.Instance.baseData.PlayerID;
|
m_Exit.SetActive(isMySelf);
|
m_SelfBackGround.SetActive(isMySelf);
|
m_SelfSign.SetActive(isMySelf);
|
m_Kickout.SetActive(!isMySelf && model.myTeam.iamCaptainer);
|
}
|
else if (!model.myTeam.inTeam && m_Index == 0)
|
{
|
teammate = new Teammate();
|
|
teammate.id = (int)PlayerDatas.Instance.baseData.PlayerID;
|
teammate.isCaptainer = false;
|
teammate.mateName = PlayerDatas.Instance.baseData.PlayerName;
|
teammate.realm = PlayerDatas.Instance.baseData.realmLevel;
|
teammate.job = PlayerDatas.Instance.baseData.Job;
|
teammate.face = AvatarHelper.GetMyAvatarID();
|
teammate.facePic = AvatarHelper.GetMyAvatarFrameID();
|
teammate.jobLevel = 1;
|
teammate.level = PlayerDatas.Instance.baseData.LV;
|
teammate.mapId = PlayerDatas.Instance.baseData.MapID;
|
teammate.lineId = PlayerDatas.Instance.baseData.FBID;
|
teammate.online = true;
|
|
DisplayTeammate(teammate);
|
|
m_SelfSign.SetActive(true);
|
m_SelfBackGround.SetActive(true);
|
m_Exit.SetActive(false);
|
m_Kickout.SetActive(false);
|
}
|
else
|
{
|
m_TeammateInfo.SetActive(false);
|
model.matchingStateChangeEvent += OnMatchMember;
|
}
|
|
OnMatchMember();
|
|
m_InteractPanel.SetActive(false);
|
m_SelectedSign.SetActive(false);
|
m_InteractPanel.activeOrDeActiveEvent += OnInteractPanelActiveOrDeActive;
|
model.teammateChangeMapEvent += OnPositionChange;
|
model.teammateOnOffLineEvent += OnTeammateOnOffLine;
|
model.teammateLevelUpEvent += OnTeammateLevelUp;
|
|
}
|
|
public void Dispose()
|
{
|
m_InteractPanel.UnInit();
|
m_InteractPanel.activeOrDeActiveEvent -= OnInteractPanelActiveOrDeActive;
|
model.matchingStateChangeEvent -= OnMatchMember;
|
model.teammateChangeMapEvent -= OnPositionChange;
|
model.teammateOnOffLineEvent -= OnTeammateOnOffLine;
|
model.teammateLevelUpEvent -= OnTeammateLevelUp;
|
}
|
|
private void OnPositionChange(int _playerId)
|
{
|
if (teammate == null || teammate.id != _playerId)
|
{
|
return;
|
}
|
|
if (model.myTeam.TryGetMemberByPlayerId(_playerId, out teammate))
|
{
|
var isNearBy = teammate.mapId == PlayerDatas.Instance.baseData.MapID;
|
m_Position.text = teammate.id == PlayerDatas.Instance.baseData.PlayerID ? "" : isNearBy ? Language.Get("TeammemberNearby") : Language.Get("TeammemberFaraway");
|
m_Position.color = isNearBy ? m_FontColorSize.GetColorSize("Near").color : m_FontColorSize.GetColorSize("Faraway").color;
|
}
|
}
|
|
private void OnTeammateOnOffLine(int _playerId)
|
{
|
if (teammate == null || teammate.id != _playerId)
|
{
|
return;
|
}
|
|
if (model.myTeam.TryGetMemberByPlayerId(_playerId, out teammate))
|
{
|
avatarCell.avatarImage.gray = !teammate.online;
|
}
|
}
|
|
private void OnTeammateLevelUp(int _playerId)
|
{
|
if (teammate == null || teammate.id != _playerId)
|
{
|
return;
|
}
|
|
var level = teammate.id == PlayerDatas.Instance.baseData.PlayerID ? PlayerDatas.Instance.baseData.LV : teammate.level;
|
m_LevelSign.SetActive(false);
|
m_Level.text = level.ToString();
|
}
|
|
private void OnMatchMember()
|
{
|
if (model.isMatching)
|
{
|
if (model.myTeam.inTeam)
|
{
|
Teammate teammate;
|
m_Matching.SetActive(!model.myTeam.TryGetMember(m_Index, out teammate));
|
}
|
else
|
{
|
m_Matching.SetActive(m_Index == 0);
|
}
|
}
|
else
|
{
|
m_Matching.SetActive(false);
|
}
|
}
|
|
private void OnInteractPanelActiveOrDeActive(bool _active)
|
{
|
m_SelectedSign.SetActive(_active);
|
}
|
|
private void ExitTeam()
|
{
|
model.RequestExitTeam();
|
}
|
|
private void KickoutTeammate()
|
{
|
Teammate teammate;
|
if (model.myTeam.TryGetMember(m_Index, out teammate))
|
{
|
model.RequestKickoutTeam(teammate.id);
|
}
|
}
|
|
private void Interact()
|
{
|
var mySelf = teammate != null && teammate.id == PlayerDatas.Instance.baseData.PlayerID;
|
if (!mySelf)
|
{
|
m_InteractPanel.SetActive(true);
|
}
|
}
|
|
private void DisplayTeammate(Teammate _mate)
|
{
|
m_TeammateInfo.SetActive(true);
|
avatarCell.InitUI(AvatarHelper.GetAvatarModel(_mate.id, _mate.face, _mate.facePic, _mate.job));
|
avatarCell.avatarImage.gray = !_mate.online;
|
m_PlayerName.text = _mate.mateName;
|
|
m_Realm.SetActive(_mate.realm > 0);
|
if (_mate.realm > 0)
|
{
|
var realmConfig = RealmConfig.Get(_mate.realm);
|
if (realmConfig != null)
|
{
|
m_Realm.SetSprite(realmConfig.Img);
|
}
|
}
|
|
m_Job.text = OccupationNameConfig.GetOccupationName(_mate.job);
|
|
var level = _mate.id == PlayerDatas.Instance.baseData.PlayerID ? PlayerDatas.Instance.baseData.LV : _mate.level;
|
m_LevelSign.SetActive(false);
|
m_Level.text = level.ToString();
|
|
var isNearBy = _mate.mapId == PlayerDatas.Instance.baseData.MapID;
|
m_Position.text = _mate.id == PlayerDatas.Instance.baseData.PlayerID ? "" : isNearBy ? Language.Get("TeamMemberNearby") : Language.Get("TeamMemberFaraway");
|
m_Position.color = isNearBy ? m_FontColorSize.GetColorSize("Near").color : m_FontColorSize.GetColorSize("Faraway").color;
|
|
m_InteractPanel.Init(_mate.id);
|
}
|
|
private void Awake()
|
{
|
m_Exit.AddListener(ExitTeam);
|
m_Kickout.AddListener(KickoutTeammate);
|
m_Interact.AddListener(Interact);
|
}
|
}
|
|
}
|
|
|
|