using System;
|
using UnityEngine;
|
|
namespace vnxbqy.UI
|
{
|
public class FairySiegeGuessWin : Window
|
{
|
[SerializeField] ButtonEx btnSave;
|
[SerializeField] ButtonEx btnAward;
|
[SerializeField] RedpointBehaviour rpAward;
|
[Header("竞猜结束")]
|
[SerializeField] Transform tranEndGuess;
|
[SerializeField] FairySiegeGuessResultItem[] results = new FairySiegeGuessResultItem[3];
|
[SerializeField] FairySiegeGuessMyChooseItem[] myChooses = new FairySiegeGuessMyChooseItem[3];
|
[SerializeField] TextEx txtRemainAwardTime;
|
[SerializeField] TextEx txtRemainAwardCountDown;
|
[Header("竞猜中")]
|
[SerializeField] Transform tranInGuess;
|
[SerializeField] ScrollerController scroller;
|
[SerializeField] FairySiegeGuessNowChooseItem[] nowChooses = new FairySiegeGuessNowChooseItem[3];
|
[SerializeField] TextEx txtRemainGuessTime;
|
[SerializeField] TextEx txtRemainGuessCountDown;
|
int state;
|
DateTime startGuessTime;
|
DateTime endGuessTime;
|
DateTime startGuessAwardTime;
|
DateTime endGuessAwardTime;
|
bool hasGuessTime;
|
bool hasGuessAward;
|
FairySiegeActModel model { get { return ModelCenter.Instance.GetModel<FairySiegeActModel>(); } }
|
|
#region Build-in
|
|
protected override void AddListeners()
|
{
|
btnAward.SetListener(() => WindowCenter.Instance.Open<FairySiegeGuessAwardWin>());
|
btnSave.SetListener(() =>
|
{
|
uint[] sendInfoArr = new uint[3];
|
for (int i = 0; i < sendInfoArr.Length; i++)
|
{
|
sendInfoArr[i] = (uint)model.chooseArr[i];
|
}
|
|
bool isSend = true;
|
for (int i = 0; i < sendInfoArr.Length; i++)
|
{
|
if (sendInfoArr[i] <= 0)
|
{
|
isSend = false;
|
}
|
}
|
if (!isSend)
|
{
|
SysNotifyMgr.Instance.ShowTip("FairySiege10", model.guessMaxChooseCnt);
|
return;
|
}
|
SysNotifyMgr.Instance.ShowTip("FairySiege11");
|
model.SendGuess(sendInfoArr);
|
});
|
}
|
|
protected override void BindController()
|
{
|
}
|
|
protected override void OnPreOpen()
|
{
|
InitRedPoint();
|
scroller.OnRefreshCell += OnRefreshCell;
|
model.UpdateChooseAction += OnUpdateChooseAction;
|
model.UpdateFamilyGCZGuessInfoEvent += OnUpdateFamilyGCZGuessInfoEvent;
|
GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
|
|
hasGuessTime = model.TryGetGuessTime(out startGuessTime, out endGuessTime);
|
hasGuessAward = model.TryGetGuessAwardTime(out startGuessAwardTime, out endGuessAwardTime);
|
for (int i = 0; i < model.chooseArr.Length; i++)
|
{
|
model.chooseArr[i] = 0;
|
if (model.SelectFamilyIDList != null && i < model.SelectFamilyIDList.Length)
|
{
|
model.chooseArr[i] = model.SelectFamilyIDList[i];
|
}
|
}
|
|
Display();
|
}
|
|
protected override void OnPreClose()
|
{
|
scroller.OnRefreshCell -= OnRefreshCell;
|
model.UpdateChooseAction -= OnUpdateChooseAction;
|
model.UpdateFamilyGCZGuessInfoEvent -= OnUpdateFamilyGCZGuessInfoEvent;
|
GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
|
}
|
|
protected override void OnAfterOpen()
|
{
|
Display();
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
|
#endregion
|
|
private void OnSecondEvent()
|
{
|
state = model.GetGuessState();//0 未开始 1 竞猜中 2 竞猜结束 3 领奖期
|
if (state == 1)
|
{
|
UpdateRemainGuessCountDown();
|
}
|
else if (state == 2 || state == 3)
|
{
|
UpdateRemainAwardCountDown();
|
}
|
}
|
|
private void OnUpdateChooseAction()
|
{
|
Display();
|
}
|
|
private void OnUpdateFamilyGCZGuessInfoEvent()
|
{
|
Display();
|
}
|
|
private void OnRefreshCell(ScrollerDataType type, CellView cell)
|
{
|
var _cell = cell.GetComponent<FairySiegeGuessCell>();
|
_cell?.Display(cell.index);
|
}
|
|
private void InitRedPoint()
|
{
|
rpAward.redpointId = model.GetRedpointId(FairySiegeRedPointType.GuessAward);
|
}
|
|
private void CreateScroller()
|
{
|
scroller.Refresh();
|
if (model.guessFamilyListDict != null)
|
{
|
var rowCount = Mathf.CeilToInt((float)model.guessFamilyListDict.Count / model.ScrRowCntMax);
|
for (var i = 0; i < rowCount; i++)
|
{
|
scroller.AddCell(ScrollerDataType.Header, i);
|
}
|
}
|
|
scroller.Restart();
|
}
|
|
private void Display()
|
{
|
state = model.GetGuessState();//0 未开始 1 竞猜中 2 竞猜结束 3 领奖期
|
tranInGuess.SetActive(state == 0 || state == 1);
|
tranEndGuess.SetActive(state == 2 || state == 3);
|
DisplayChooseFairy();
|
CreateScroller();
|
DisplayResults();
|
DisplayMyChooses();
|
UpdateRemainAwardCountDown();
|
UpdateRemainGuessCountDown();
|
}
|
|
public void UpdateRemainAwardCountDown()
|
{
|
TimeSpan t = endGuessAwardTime - ILTimeUtility.ServerCrossNow;
|
int time = (int)t.TotalSeconds;
|
txtRemainAwardTime.SetActive(state == 3 && hasGuessAward && time > 0);
|
txtRemainAwardCountDown.SetActive(state == 3 && hasGuessAward && time > 0);
|
txtRemainAwardCountDown.text = TimeUtility.SecondsToDHMS(time);
|
}
|
|
public void UpdateRemainGuessCountDown()
|
{
|
TimeSpan t = endGuessTime - ILTimeUtility.ServerCrossNow;
|
int time = (int)t.TotalSeconds;
|
txtRemainGuessTime.SetActive(state == 1 && hasGuessTime && time > 0);
|
txtRemainGuessCountDown.SetActive(state == 1 && hasGuessTime && time > 0);
|
txtRemainGuessCountDown.text = TimeUtility.SecondsToDHMS(time);
|
}
|
|
private void DisplayMyChooses()
|
{
|
if (!model.SelectFamilyIDList.IsNullOrEmpty())
|
{
|
for (var i = 0; i < myChooses.Length; i++)
|
{
|
var item = myChooses[i];
|
if (i < model.SelectFamilyIDList.Length)
|
{
|
var fairyId = model.SelectFamilyIDList[i];
|
item.SetActive(true);
|
item.Display(i + 1, fairyId);
|
}
|
else
|
{
|
item.SetActive(false);
|
}
|
}
|
}
|
else
|
{
|
for (var i = 0; i < myChooses.Length; i++)
|
{
|
var item = myChooses[i];
|
item.Display(i + 1, -1);
|
}
|
}
|
}
|
|
private void DisplayResults()
|
{
|
if (!model.FinalFamilyIDList.IsNullOrEmpty())
|
{
|
for (var i = 0; i < results.Length; i++)
|
{
|
var item = results[i];
|
if (i < model.FinalFamilyIDList.Length)
|
{
|
var fairyId = model.FinalFamilyIDList[i];
|
item.SetActive(true);
|
item.Display(i + 1, fairyId);
|
}
|
else
|
{
|
item.SetActive(false);
|
}
|
}
|
}
|
else
|
{
|
for (var i = 0; i < results.Length; i++)
|
{
|
var item = results[i];
|
item.Display(i + 1, -1);
|
}
|
}
|
}
|
|
private void DisplayChooseFairy()
|
{
|
var chooseArr = model.chooseArr;
|
|
for (var i = 0; i < nowChooses.Length; i++)
|
{
|
var item = nowChooses[i];
|
if (i < chooseArr.Length)
|
{
|
var fairyId = chooseArr[i];
|
item.SetActive(true);
|
item.Display(i + 1, fairyId);
|
}
|
else
|
{
|
item.SetActive(false);
|
}
|
}
|
}
|
}
|
}
|