using System;
|
using UnityEngine;
|
using UnityEngine.UI;
|
using System.Collections;
|
|
namespace vnxbqy.UI
|
{
|
public class SetFreeTimeWin : Window
|
{
|
[SerializeField] Text titleText;
|
[SerializeField] ScrollerController hourlistCtrl;
|
[SerializeField] ScrollerController minutelistCtrl;
|
[SerializeField] Button closeBtn;
|
[SerializeField] Button sureBtn;
|
[SerializeField] Button cancelBtn;
|
[SerializeField] Transform selectTimePos;
|
[SerializeField] CanvasGroup canvas;
|
|
static string titleName;
|
static int timeType;
|
static int curHour;
|
static int curMinute;
|
bool isOpen = true;
|
|
public static int DownNum = 2;
|
SetPrivateModel privateModel { get { return ModelCenter.Instance.GetModel<SetPrivateModel>(); } }
|
|
protected override void BindController()
|
{
|
hourlistCtrl.OnRefreshCell += RefreshHourTimeCell;
|
minutelistCtrl.OnRefreshCell += RefreshMinuteTimeCell;
|
}
|
|
protected override void AddListeners()
|
{
|
closeBtn.AddListener(CloseClick);
|
cancelBtn.AddListener(CloseClick);
|
sureBtn.AddListener(ClickSureBtn);
|
}
|
|
protected override void OnPreOpen()
|
{
|
canvas.alpha = 0;
|
isOpen = true;
|
titleText.text = titleName;
|
CreateHourCell();
|
CreateMinuteCell();
|
}
|
protected override void OnAfterOpen()
|
{
|
StartCoroutine(DelayHourJump());
|
StartCoroutine(DelayMinuteJump());
|
}
|
|
protected override void OnPreClose()
|
{
|
|
}
|
protected override void OnAfterClose()
|
{
|
|
}
|
|
public static void SetTitleName(int type,int hour,int minute)
|
{
|
timeType = type;
|
switch(type)
|
{
|
case 1:
|
titleName = Language.Get("SetUpPrivate104");
|
break;
|
case 2:
|
titleName = Language.Get("SetUpPrivate105");
|
break;
|
}
|
|
curHour = hour;
|
curMinute = minute;
|
if(!WindowCenter.Instance.IsOpen<SetFreeTimeWin>())
|
{
|
WindowCenter.Instance.Open<SetFreeTimeWin>();
|
}
|
}
|
|
private void CreateHourCell()
|
{
|
hourlistCtrl.Refresh();
|
for(int i = 0; i < 24;i++)
|
{
|
hourlistCtrl.AddCell(ScrollerDataType.Header,i);
|
}
|
hourlistCtrl.Restart();
|
|
}
|
|
private void CreateMinuteCell()
|
{
|
minutelistCtrl.Refresh();
|
for (int i = 0; i < 60; i++)
|
{
|
minutelistCtrl.AddCell(ScrollerDataType.Header, i);
|
}
|
minutelistCtrl.Restart();
|
|
}
|
|
IEnumerator DelayHourJump()
|
{
|
yield return null;
|
for (int i = 0; i < 24; i++)
|
{
|
int hour = i % 24;
|
if (hour == curHour)
|
{
|
hourlistCtrl.JumpIndex(i - DownNum);
|
break;
|
}
|
}
|
canvas.alpha = 1;
|
yield return null;
|
isOpen = false;
|
|
}
|
|
IEnumerator DelayMinuteJump()
|
{
|
yield return null;
|
for (int i = 0; i < 60; i++)
|
{
|
int minute = i % 60;
|
if (minute == curMinute)
|
{
|
minutelistCtrl.JumpIndex(i - DownNum);
|
break;
|
}
|
}
|
canvas.alpha = 1;
|
yield return null;
|
isOpen = false;
|
|
}
|
private void RefreshHourTimeCell(ScrollerDataType type, CellView cell)
|
{
|
FreeTimeCell timeCell = cell.GetComponent<FreeTimeCell>();
|
int curNum = cell.index % 24;
|
if (isOpen)
|
{
|
timeCell.SetModel(TimeType.Hour, curNum, curHour);
|
}
|
else
|
{
|
timeCell.SetModel(TimeType.Hour, curNum,GetSelectNum(TimeType.Hour));
|
}
|
}
|
|
|
private void RefreshMinuteTimeCell(ScrollerDataType type, CellView cell)
|
{
|
FreeTimeCell timeCell = cell.GetComponent<FreeTimeCell>();
|
int curNum = cell.index % 60;
|
if (isOpen)
|
{
|
timeCell.SetModel(TimeType.Minute, curNum, curMinute);
|
}
|
else
|
{
|
timeCell.SetModel(TimeType.Minute, curNum, GetSelectNum(TimeType.Minute));
|
}
|
}
|
|
public int GetSelectNum(TimeType timeType)
|
{
|
Transform content = null;
|
switch (timeType)
|
{
|
case TimeType.Hour:
|
content = hourlistCtrl.mScrollRect.content;
|
break;
|
case TimeType.Minute:
|
content = minutelistCtrl.mScrollRect.content;
|
break;
|
}
|
int childCount = content.childCount;
|
int minIndex = 0;
|
int maxIndex = 0;
|
for (int i = 0; i < childCount; i++)
|
{
|
FreeTimeCell timeCell = content.GetChild(i).GetComponent<FreeTimeCell>();
|
if (timeCell != null)
|
{
|
minIndex = timeCell.index;
|
break;
|
}
|
}
|
|
for (int i = childCount - 1; i > -1; i--)
|
{
|
FreeTimeCell timeCell = content.GetChild(i).GetComponent<FreeTimeCell>();
|
if (timeCell != null)
|
{
|
maxIndex = timeCell.index;
|
break;
|
}
|
}
|
|
int midIndex = 0;
|
switch (timeType)
|
{
|
case TimeType.Hour:
|
if(maxIndex < minIndex)
|
{
|
maxIndex += 24;
|
}
|
midIndex = (minIndex + maxIndex) / 2;
|
curHour = midIndex % 24;
|
return curHour;
|
case TimeType.Minute:
|
if (maxIndex < minIndex)
|
{
|
maxIndex += 60;
|
}
|
midIndex = (minIndex + maxIndex) / 2;
|
curMinute = midIndex % 60;
|
return curMinute;
|
}
|
return 0;
|
}
|
|
|
private void ClickSureBtn()
|
{
|
privateModel.SetRefreshFreeTimeEvent(timeType, curHour,curMinute);
|
CloseClick();
|
}
|
}
|
}
|