//--------------------------------------------------------
|
// [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<TeamModel>(); } }
|
|
#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<DungeonModel>();
|
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<TeamPrepareWin>();
|
}
|
}
|
|
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<TeamPrepareWin>();
|
SysNotifyMgr.Instance.ShowTip("TeamPrepareTimeOut");
|
}
|
}
|
|
IEnumerator Co_DelayCloseWin()
|
{
|
yield return null;
|
WindowCenter.Instance.Close<TeamPrepareWin>();
|
}
|
|
}
|
|
}
|
|
|
|
|