//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, April 09, 2018 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using System; using System.Collections.Generic; using TableConfig; namespace Snxxz.UI { public class CrossServerOneVsOneCyclicScroll : CyclicScroll { const float fadeOutTime = 0.3f; const float relocationTime = 0.4f; CrossSeverOneVsOneDayAwardCell showAchievementBehaviour; bool m_Showing = false; public bool showing { get { return m_Showing; } private set { m_Showing = value; } } List dayAwards; CrossServerOneVsOneModel crossServerModel { get { return ModelCenter.Instance.GetModel(); } } public void ShowTreasures(bool _stepByStep) { dayAwards = crossServerModel.GetDayAwardsList(); Init(dayAwards, _stepByStep); } public override void Init(List _datas, bool _stepByStep = false) { for (int i = 0; i < infiniteItems.Count; i++) { var item = infiniteItems[i] as CrossSeverOneVsOneDayAwardCell; item.alphaTween.SetStartState(); item.linerMove.Stop(); } showing = false; base.Init(_datas, _stepByStep); showing = true; this.enabled = false; Clock.Create(DateTime.Now + new TimeSpan((long)(0.5f * TimeSpan.TicksPerSecond)), OnUnfoldShowEnd); } private void OnUnfoldShowEnd() { showing = false; this.enabled = true; } public void ShowBegin(CrossSeverOneVsOneDayAwardCell _showItem) { this.enabled = false; showing = true; showAchievementBehaviour = _showItem; showAchievementBehaviour.alphaTween.from = 1f; showAchievementBehaviour.alphaTween.to = 0f; showAchievementBehaviour.alphaTween.duration = fadeOutTime; showAchievementBehaviour.alphaTween.SetStartState(); showAchievementBehaviour.alphaTween.Play(); var endTime = DateTime.Now + new TimeSpan((long)(fadeOutTime * TimeSpan.TicksPerSecond)); Clock.Create(endTime, ReLocateItems); } void ReLocateItems() { showAchievementBehaviour.alphaTween.SetStartState(); dayAwards = crossServerModel.GetDayAwardsList(); ReLocateAllItems(showAchievementBehaviour); var endTime = DateTime.Now + new TimeSpan((long)(relocationTime * TimeSpan.TicksPerSecond)); Clock.Create(endTime, ShowEnd); } void ShowEnd() { this.enabled = true; showing = false; } private void ReLocateAllItems(ScrollItem _scrollItem) { var index = infiniteItems.IndexOf(_scrollItem); if (index != -1) { var showBehaviour = _scrollItem as CrossSeverOneVsOneDayAwardCell; var lastItem = infiniteItems[infiniteItems.Count - 1]; showBehaviour.rectTransform.anchoredPosition = lastItem.rectTransform.anchoredPosition.SetY(lastItem.rectTransform.anchoredPosition.y - cellSize.y - spacing.y); showBehaviour.gameObject.SetActive(false); infiniteItems.Remove(_scrollItem); infiniteItems.Add(_scrollItem); for (int i = 0; i < infiniteItems.Count; i++) { var item = infiniteItems[i] as CrossSeverOneVsOneDayAwardCell; if (item != null && preIndex + i < datas.Count) { item.Display(datas[preIndex + i]); } } for (int i = index; i < infiniteItems.Count; i++) { var item = infiniteItems[i]; var achievementBehaviour = item as CrossSeverOneVsOneDayAwardCell; achievementBehaviour.linerMove.from = achievementBehaviour.rectTransform.anchoredPosition; var toY = achievementBehaviour.rectTransform.anchoredPosition.y + cellSize.y + spacing.y; achievementBehaviour.linerMove.to = achievementBehaviour.rectTransform.anchoredPosition.SetY(toY); achievementBehaviour.linerMove.duration = relocationTime; if (achievementBehaviour.linerMove.gameObject.activeInHierarchy) { achievementBehaviour.linerMove.Begin(); } else { achievementBehaviour.linerMove.Stop(); } } } } public void ResetScrollItemName() { for (int i = 0; i < infiniteItems.Count; i++) { infiniteItems[i].name = string.Format("Achievement_{0}", i); } } } }