using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class FlashRushToBuyWin : Window { [SerializeField] ScrollerController saleTimeCtrl; [SerializeField] Text opreationTimeText; [SerializeField] Image moneyIcon; [SerializeField] Text moneyNumText; [SerializeField] GameObject activityOpenObj; [SerializeField] GameObject activityCloseObj; [SerializeField] List flashSaleItems = new List(); [SerializeField] RectTransform saleItemsContent; StoreModel storeModel { get { return ModelCenter.Instance.GetModel(); } } FlashRushToBuyModel rushToBuyModel { get { return ModelCenter.Instance.GetModel(); } } OperationFlashRushToBuy operation = null; Vector3 startPos = Vector3.zero; #region Built-in protected override void BindController() { } protected override void AddListeners() { } protected override void OnPreOpen() { rushToBuyModel.SetDefaultSelectSaleTime(); OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent; OperationTimeHepler.Instance.operationTimeUpdateEvent += OperationTimeUpdateEvent; rushToBuyModel.UpdateSelectSaleTimeEvent += UpdateSelectSaleTime; rushToBuyModel.UpdatePresentFlashShopCloseEvent += UpdatePresentFlashShopClose; storeModel.RefreshBuyShopLimitEvent += RefreshBuyShopLimitEvent; SetDisplayModel(); Display(); } protected override void OnAfterOpen() { startPos = saleItemsContent.anchoredPosition3D; rushToBuyModel.SetDayRemind(); CreateSaleItem(); } protected override void OnPreClose() { rushToBuyModel.UpdatePresentFlashShopCloseEvent -= UpdatePresentFlashShopClose; rushToBuyModel.UpdateSelectSaleTimeEvent -= UpdateSelectSaleTime; OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent; OperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationTimeUpdateEvent; storeModel.RefreshBuyShopLimitEvent -= RefreshBuyShopLimitEvent; saleItemsContent.anchoredPosition3D = startPos; rushToBuyModel.ResetFlashShop(); } protected override void OnAfterClose() { } #endregion private void SetDisplayModel() { operation = null; OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashRushToBuy, out operationBase)) { operation = operationBase as OperationFlashRushToBuy; } } private void Display() { if (rushToBuyModel.presentFlashShop == null|| operation == null) return; opreationTimeText.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"),UIHelper.AppendColor(TextColType.Green, operation.ToDisplayTime())); UpdateMoneyInfo(); activityOpenObj.SetActive(true); activityCloseObj.SetActive(false); CreateOperationTimes(); } private void RefreshBuyShopLimitEvent() { UpdateMoneyInfo(); } private void UpdateMoneyInfo() { if (rushToBuyModel.presentFlashShop == null || operation == null) return; if (rushToBuyModel.presentFlashShop.items.Length > 0) { var moneyType = rushToBuyModel.presentFlashShop.items[0].moneyType; moneyIcon.SetIconWithMoneyType(moneyType); moneyNumText.text = UIHelper.GetMoneyCnt(moneyType).ToString(); } } private void UpdateSelectSaleTime() { CreateSaleItem(); saleTimeCtrl.m_Scorller.RefreshActiveCellViews(); } private void UpdatePresentFlashShopClose() { if(rushToBuyModel.presentFlashShop != null) { activityOpenObj.SetActive(true); activityCloseObj.SetActive(false); CreateOperationTimes(); CreateSaleItem(); } else { activityOpenObj.SetActive(false); activityCloseObj.SetActive(true); } } private void CreateOperationTimes() { if (operation == null) return; saleTimeCtrl.Refresh(); for (int i = 0; i < operation.flashShops.Count; i++) { var saleShop = operation.flashShops[i]; int seconds = 0; int buyState = operation.GetBuyTimeState(TimeUtility.ServerNow, saleShop.dayIndex, saleShop.timeIndex, out seconds); if(buyState != 1) { int index = saleShop.dayIndex * 100 + saleShop.timeIndex; saleTimeCtrl.AddCell(ScrollerDataType.Header, index); } } saleTimeCtrl.Restart(); } public void CreateSaleItem() { saleItemsContent.anchoredPosition3D = startPos; var flashItems = rushToBuyModel.presentFlashShop.items; for(int i = 0; i < flashSaleItems.Count; i++) { if(i < flashItems.Length) { flashSaleItems[i].SetActive(true); flashSaleItems[i].SetDisplayModel(i); } else { flashSaleItems[i].SetActive(false); } } int seconds = 0; int buyState = operation.GetBuyTimeState(TimeUtility.ServerNow,rushToBuyModel.presentFlashShop.dayIndex, rushToBuyModel.presentFlashShop.timeIndex,out seconds); if(buyState == 0) { for (int i = 0; i < flashItems.Length; i++) { if (flashItems[i].isAppointment == 1) { if (i > 2) { float offsetX = 224 * (i - 2) + 10 * (i - 3); float posX = saleItemsContent.anchoredPosition3D.x - offsetX; saleItemsContent.anchoredPosition3D = new Vector3(posX,saleItemsContent.anchoredPosition3D.y,0); } break; } } } } private void OperationTimeUpdateEvent(Operation type) { if (type == Operation.FlashRushToBuy) { Display(); } } private void OperationStartEvent(Operation type, int state) { if (type == Operation.FlashRushToBuy && state == 0) { Display(); } } } }