//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, October 17, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using TableConfig; using System; namespace Snxxz.UI { public class MyTeammateBehaviour : MonoBehaviour { [SerializeField] int m_Index = 0; [SerializeField] Transform m_Matching; [SerializeField] Transform m_TeammateInfo; [SerializeField] ImageEx m_Icon; [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(); } } 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.gameObject.SetActive(isMySelf); m_SelfBackGround.gameObject.SetActive(isMySelf); m_SelfSign.gameObject.SetActive(isMySelf); m_Kickout.gameObject.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.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.gameObject.SetActive(true); m_SelfBackGround.gameObject.SetActive(true); m_Exit.gameObject.SetActive(false); m_Kickout.gameObject.SetActive(false); } else { m_TeammateInfo.gameObject.SetActive(false); model.matchingStateChangeEvent += OnMatchMember; } OnMatchMember(); m_InteractPanel.gameObject.SetActive(false); m_SelectedSign.gameObject.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)) { m_Icon.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; var isNirvanaLevel = level > GeneralConfig.Instance.greatMasterStartLV; m_LevelSign.gameObject.SetActive(isNirvanaLevel); m_Level.text = isNirvanaLevel ? (level - GeneralConfig.Instance.greatMasterStartLV).ToString() : level.ToString(); } private void OnMatchMember() { if (model.isMatching) { if (model.myTeam.inTeam) { Teammate teammate; m_Matching.gameObject.SetActive(!model.myTeam.TryGetMember(m_Index, out teammate)); } else { m_Matching.gameObject.SetActive(m_Index == 0); } } else { m_Matching.gameObject.SetActive(false); } } private void OnInteractPanelActiveOrDeActive(bool _active) { m_SelectedSign.gameObject.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.gameObject.SetActive(true); } } private void DisplayTeammate(Teammate _mate) { m_TeammateInfo.gameObject.SetActive(true); m_Icon.SetSprite(GeneralConfig.Instance.GetOtherJobHeadPortrait(_mate.job, 0)); m_Icon.gray = !_mate.online; m_PlayerName.text = _mate.mateName; m_Realm.gameObject.SetActive(_mate.realm > 0); if (_mate.realm > 0) { var realmConfig = Config.Instance.Get(_mate.realm); if (realmConfig != null) { m_Realm.SetSprite(realmConfig.Img); } } m_Job.text = OccupationNameConfig.GetOccupationName(_mate.job, _mate.jobLevel); var level = _mate.id == PlayerDatas.Instance.baseData.PlayerID ? PlayerDatas.Instance.baseData.LV : _mate.level; var isNirvanaLevel = level > GeneralConfig.Instance.greatMasterStartLV; m_LevelSign.gameObject.SetActive(isNirvanaLevel); m_Level.text = isNirvanaLevel ? (level - GeneralConfig.Instance.greatMasterStartLV).ToString() : 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); } } }