//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, November 10, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class TeamPrepareWin : Window { [SerializeField] Text m_DungeonName; [SerializeField] TeamPrepareBehaviour[] m_PrepareBehaviours; [SerializeField] Slider m_TimeSlider; [SerializeField] Text m_SurplusTime; [SerializeField] Button m_Reject; [SerializeField] ImageEx m_RejectIcon; [SerializeField] Button m_Prepare; [SerializeField] ImageEx m_PrepareIcon; [SerializeField] Button m_CaptainerCancel; float timeOut = 0f; float timer = 0f; bool alreadyAutoPrepare = false; bool rejectManual = false; TeamModel model { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Reject.AddListener(Reject); m_Prepare.AddListener(Prepare); m_CaptainerCancel.AddListener(CaptainerCancel); } protected override void OnPreOpen() { if (NewBieCenter.Instance.inGuiding) { NewBieCenter.Instance.FinishNewBieGuide(NewBieCenter.Instance.currentGuide); } timeOut = Time.time + GeneralDefine.teamReadyTime + 10f; rejectManual = false; if (!model.myTeam.iamCaptainer) { HeroAIRecorder.Record(); } PlayerDatas.Instance.hero.Behaviour.StopHandupAI(); MapTransferUtility.Instance.Clear(); PlayerDatas.Instance.hero.StopPathFind(); alreadyAutoPrepare = false; var dungeonModel = ModelCenter.Instance.GetModel(); var dungeonId = dungeonModel.GetDungeonId(model.teamPrepare.mapId, model.teamPrepare.mapEx); var dungeonConfig = DungeonConfig.Get(dungeonId); m_DungeonName.text = dungeonConfig.FBName; m_Reject.SetActive(!model.myTeam.iamCaptainer); m_Prepare.SetActive(!model.myTeam.iamCaptainer); m_CaptainerCancel.SetActive(model.myTeam.iamCaptainer); ShowPrepareStates(); if (model.myTeam.autoPrepare.auto) { if (model.myTeam.autoPrepare.cancelWhenTargetChange) { if (model.myTeam.autoPrepare.mapId == model.teamPrepare.mapId && model.myTeam.autoPrepare.mapEx == model.teamPrepare.mapEx) { Prepare(); } } else { Prepare(); } } } protected override void OnAfterOpen() { model.memberPrepareStateChangeEvent += ShowPrepareStates; } protected override void OnPreClose() { if (rejectManual || model.teamPrepare.isError || model.teamPrepare.IsReject()) { if (HeroAIRecorder.autoHandupRecord) { if (PlayerDatas.Instance.hero != null) { PlayerDatas.Instance.hero.Behaviour.StartHandupAI(); } } if (HeroAIRecorder.moveToNPCRecord != 0) { MapTransferUtility.Instance.MoveToNPC(HeroAIRecorder.moveToNPCRecord); } } HeroAIRecorder.ClearRecord(); model.memberPrepareStateChangeEvent -= ShowPrepareStates; } protected override void OnAfterClose() { } #endregion private void ShowPrepareStates() { for (int i = 0; i < m_PrepareBehaviours.Length; i++) { var behaviour = m_PrepareBehaviours[i]; Teammate teammate; if (model.myTeam.TryGetMember(i, out teammate) && model.teamPrepare.playerStates.ContainsKey(teammate.id)) { behaviour.Display(model.teamPrepare.GetPlayerPrepareSate(teammate.id) == TeammatePrepareState.Prepared, teammate); } else { behaviour.DisplayEmpty(); } } var myPlayerId = PlayerDatas.Instance.baseData.PlayerID; var prepareState = model.teamPrepare.GetPlayerPrepareSate((int)myPlayerId); m_PrepareIcon.gray = m_RejectIcon.gray = prepareState == TeammatePrepareState.Prepared; } private void Reject() { var myPlayerId = PlayerDatas.Instance.baseData.PlayerID; var prepareState = model.teamPrepare.GetPlayerPrepareSate((int)myPlayerId); if (prepareState == TeammatePrepareState.UnPrepared) { rejectManual = true; model.RequestPrepareEnterDungeon(false); } StartCoroutine(Co_DelayCloseWin()); } private void Prepare() { var myPlayerId = PlayerDatas.Instance.baseData.PlayerID; var prepareState = model.teamPrepare.GetPlayerPrepareSate((int)myPlayerId); if (prepareState == TeammatePrepareState.UnPrepared) { model.RequestPrepareEnterDungeon(true); } } private void CaptainerCancel() { if (model.myTeam.iamCaptainer) { rejectManual = true; model.RequestPrepareEnterDungeon(false); WindowCenter.Instance.Close(); } } protected override void LateUpdate() { base.LateUpdate(); var endTime = model.prepareBeginTime + new TimeSpan(GeneralDefine.teamReadyTime * TimeSpan.TicksPerSecond); timer += Time.deltaTime; if (timer > 1f) { timer = 0f; var surplusSecond = Mathf.Clamp((float)(endTime - DateTime.Now).TotalSeconds, 0f, float.MaxValue); m_SurplusTime.text = StringUtility.Contact((int)surplusSecond, Language.Get("RealmWin_Bewrite_35")); } m_TimeSlider.value = (float)(DateTime.Now - model.prepareBeginTime).TotalSeconds / GeneralDefine.teamReadyTime; var myPlayerId = PlayerDatas.Instance.baseData.PlayerID; var prepareState = model.teamPrepare.GetPlayerPrepareSate((int)myPlayerId); if (prepareState == TeammatePrepareState.UnPrepared) { if (DateTime.Now > endTime && !alreadyAutoPrepare) { alreadyAutoPrepare = true; Reject(); } } if (Time.time > timeOut) { WindowCenter.Instance.Close(); SysNotifyMgr.Instance.ShowTip("TeamPrepareTimeOut"); } } IEnumerator Co_DelayCloseWin() { yield return null; WindowCenter.Instance.Close(); } } }