//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, October 16, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class TeamListWin : Window { [SerializeField] Button m_Close; [SerializeField] TeamMissionGroup m_MissionList; [SerializeField] Transform m_ContainerNoTeam; [SerializeField] CyclicScroll m_TeamList; [SerializeField] ButtonEx m_Refresh; [SerializeField] Button m_AutoFind; [SerializeField] Text m_MatchState; [SerializeField] Button m_CreateTeam; [SerializeField] Button m_ExitTeam; float autoRefreshTimer = 0f; TeamModel model { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Close.AddListener(CloseClick); m_AutoFind.AddListener(AutoMatchTeam); m_Refresh.AddListener(RefreshCurrentTeamList); m_CreateTeam.AddListener(CreateTeam); m_ExitTeam.AddListener(ExitTeam); } protected override void OnPreOpen() { try { if (model.missionBuf != null && model.missionBuf.mapId == TeamModel.NONE_MISSION) { model.currentMission = new TeamMission(TeamModel.CURRENTMAP_MISSION, 0); } else { model.currentMission = model.missionBuf; } m_MissionList.Init(); m_MissionList.OnMissionSelected(RefreshTeamList); m_ContainerNoTeam.gameObject.SetActive(true); m_TeamList.gameObject.SetActive(false); autoRefreshTimer = 5f; RefreshCurrentTeamList(); m_CreateTeam.gameObject.SetActive(!model.myTeam.inTeam); m_ExitTeam.gameObject.SetActive(model.myTeam.inTeam); m_AutoFind.gameObject.SetActive(!model.myTeam.inTeam && model.currentMission.mapEx != -1); m_MatchState.text = model.isMatching ? Language.Get("StopMatching") : Language.Get("TeamListAutoMatching"); model.theirTeamListRefreshEvent += ShowTeamList; model.myTeamRefreshEvent += OnTeammemberRefresh; model.matchingStateChangeEvent += OnMatchStateChange; } catch (Exception ex) { DebugEx.Log(ex); } } protected override void OnAfterOpen() { } protected override void OnPreClose() { m_MissionList.OnMissionSelected(null); model.theirTeamListRefreshEvent -= ShowTeamList; model.myTeamRefreshEvent -= OnTeammemberRefresh; model.matchingStateChangeEvent -= OnMatchStateChange; } protected override void OnAfterClose() { } protected override void LateUpdate() { base.LateUpdate(); autoRefreshTimer -= Time.deltaTime; if (autoRefreshTimer < 0f) { RefreshCurrentTeamList(); } } public override void CloseClick() { WindowCenter.Instance.Close(); } #endregion private void ShowTeamList() { var teamList = model.theirTeams; if (teamList == null || teamList.Count == 0) { m_ContainerNoTeam.gameObject.SetActive(true); m_TeamList.gameObject.SetActive(false); } else { m_ContainerNoTeam.gameObject.SetActive(false); m_TeamList.gameObject.SetActive(true); m_TeamList.Init(teamList); } } private void RefreshCurrentTeamList() { autoRefreshTimer = 5f; model.RequestQueryTeamList(); } private void RefreshTeamList(int _mapId, int _mapEx) { model.currentMission = new TeamMission(_mapId, _mapEx); model.RequestQueryTeamList(); m_AutoFind.gameObject.SetActive(!model.myTeam.inTeam && model.currentMission.mapEx != -1); } private void AutoMatchTeam() { if (model.isMatching) { model.RequestCancelAutoMatchTeam(); } else { if (model.currentMission.mapId == TeamModel.NONE_MISSION) { MessageWin.Inst.ShowFixedTip("AutoMatchingNoTarget"); } else if (model.myTeam.memberCount >= 4) { SysNotifyMgr.Instance.ShowTip("AutoMatchingCannotJoinTeam"); } else { model.RequestAutoMatchTeam(false); } } } private void ExitTeam() { model.RequestExitTeam(); } private void CreateTeam() { model.RequestCreateTeam(model.currentMission.mapId, model.currentMission.mapEx, model.levelMinBuf, model.levelMaxBuf); } private void OnTeammemberRefresh() { m_CreateTeam.gameObject.SetActive(!model.myTeam.inTeam); m_ExitTeam.gameObject.SetActive(model.myTeam.inTeam); m_AutoFind.gameObject.SetActive(!model.myTeam.inTeam && model.currentMission.mapEx != -1); } private void OnMatchStateChange() { m_MatchState.text = model.isMatching ? Language.Get("StopMatching") : Language.Get("TeamListAutoMatching"); if (model.isMatching) { SysNotifyMgr.Instance.ShowTip("BeginAutoMatching"); } } } }