From b0ee7032421920c029b142c8df35e7fb7916cfb3 Mon Sep 17 00:00:00 2001
From: Client_PangDeRong <593317293@qq.com>
Date: 星期三, 10 十月 2018 10:43:24 +0800
Subject: [PATCH] 4074  【前端】限时抢购开发

---
 System/OpenServerActivity/FlashRushToBuyModel.cs |  227 +++++++++++++++++++++++++++++++++++++++++++-
 System/OpenServerActivity/FlashRushToBuyWin.cs   |   11 -
 System/OpenServerActivity/FlashSaleItemCell.cs   |   22 ++++
 3 files changed, 242 insertions(+), 18 deletions(-)

diff --git a/System/OpenServerActivity/FlashRushToBuyModel.cs b/System/OpenServerActivity/FlashRushToBuyModel.cs
index d76a7af..05785c8 100644
--- a/System/OpenServerActivity/FlashRushToBuyModel.cs
+++ b/System/OpenServerActivity/FlashRushToBuyModel.cs
@@ -5,28 +5,237 @@
 
 namespace Snxxz.UI
 {
-    public class FlashRushToBuyModel : Model,IBeforePlayerDataInitialize,IAfterPlayerDataInitialize,IPlayerLoginOk
+    public class FlashRushToBuyModel : Model,IBeforePlayerDataInitialize,IPlayerLoginOk,IOpenServerActivity
     {
+        StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } }
         public override void Init()
         {
-            
+            OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
+            OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
+            OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent;
+            TimeMgr.Instance.OnDayEvent += OnDayEvent;
+            OpenServerActivityCenter.Instance.Register(4, this);
         }
+
         public void OnBeforePlayerDataInitialize()
         {
+        }
 
-        }
-        public void OnAfterPlayerDataInitialize()
-        {
-           
-        }
         public void OnPlayerLoginOk()
         {
-            
+            UpdateRedpoint();
         }
 
         public override void UnInit()
         {
-            
+            OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
+            OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
+            OperationTimeHepler.Instance.operationAdvanceEvent -= OperationAdvanceEvent;
+            TimeMgr.Instance.OnDayEvent -= OnDayEvent;
+        }
+
+        public bool IsOpen
+        {
+            get
+            {
+                return OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.FlashRushToBuy);
+            }
+        }
+
+        public bool priorityOpen
+        {
+            get
+            {
+                return flashSaleRedpoint.state == RedPointState.Simple;
+            }
+        }
+
+        public bool IsAdvance
+        {
+            get
+            {
+                return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.FlashRushToBuy);
+            }
+        }
+
+
+        public OperationFlashRushToBuy.FlashSale presentFlashSale { get; private set; }
+        public void UpdateSelectFlashSaleTime(int index)
+        {
+            OperationBase operationBase;
+            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashRushToBuy, out operationBase))
+            {
+                OperationFlashRushToBuy operation = operationBase as OperationFlashRushToBuy;
+                OperationFlashRushToBuy.FlashSale flashSale;
+                operation.TryGetFlashSale(TimeUtility.ServerNow, out flashSale);
+                presentFlashSale = flashSale;
+            }
+        }
+
+        private void OperationEndEvent(Operation type, int state)
+        {
+            if (type == Operation.FlashSale && state == 0)
+            {
+                UpdateRedpoint();
+                if (onStateUpate != null)
+                {
+                    onStateUpate(4);
+                }
+            }
+        }
+
+        private void OperationAdvanceEvent(Operation type)
+        {
+            if (type == Operation.FlashSale)
+            {
+                if (onStateUpate != null)
+                {
+                    onStateUpate(4);
+                }
+            }
+        }
+
+        private void OperationStartEvent(Operation type, int state)
+        {
+            if (type == Operation.FlashSale && state == 0)
+            {
+                UpdateRedpoint();
+                if (onStateUpate != null)
+                {
+                    onStateUpate(4);
+                }
+            }
+        }
+
+        private void OnDayEvent()
+        {
+            UpdateRedpoint();
+        }
+
+        public void SetDayRemind()
+        {
+            if (flashSaleRedpoint.state == RedPointState.Simple)
+            {
+                DayRemind.Instance.SetDayRemind(DayRemind.FLASHSALE_REDPOINT, true);
+                UpdateRedpoint();
+            }
+        }
+
+        public void SendBuyFlashSale(OperationFlashSale.FlashSaleGift gift)
+        {
+            OperationBase operationBase;
+            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase))
+            {
+                OperationFlashSale operation = operationBase as OperationFlashSale;
+                if (operation.InAdvanceTime(TimeUtility.ServerNow))
+                {
+                    var seconds = operation.GetSecondsBeforeStart(TimeUtility.ServerNow);
+                    SysNotifyMgr.Instance.ShowTip("FlashSaleAdvanceLimit", TimeUtility.SecondsToHMS(seconds));
+                    return;
+                }
+                if (!operation.InTime(TimeUtility.ServerNow))
+                {
+                    SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
+                    return;
+                }
+                if (!gift.Equals(default(OperationFlashSale.FlashSaleGift)))
+                {
+                    var buyInfo = storeModel.GetBuyShopLimit((uint)gift.id);
+                    var buyCount = 0;
+                    if (buyInfo != null)
+                    {
+                        buyCount = buyInfo.BuyCnt;
+                    }
+                    if (buyCount >= gift.limitNum)
+                    {
+                        return;
+                    }
+
+                    if (UIHelper.GetMoneyCnt(gift.moneyType) < (ulong)gift.moneyNumber)
+                    {
+                        switch (gift.moneyType)
+                        {
+                            case 1:
+                                if (VersionConfig.Get().isBanShu)
+                                {
+                                    SysNotifyMgr.Instance.ShowTip("GoldErr");
+                                    return;
+                                }
+                                WindowCenter.Instance.Open<RechargeTipWin>();
+                                break;
+                            default:
+                                SysNotifyMgr.Instance.ShowTip("LackMoney", gift.moneyType);
+                                break;
+                        }
+                        return;
+                    }
+                    if (gift.moneyType == 1)
+                    {
+                        ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"),
+                        Language.Get("OSTimeLimitGiftConfirm", gift.moneyNumber), (bool isOk) =>
+                        {
+                            if (isOk)
+                            {
+                                C0803_tagCBuyItemList pak = new C0803_tagCBuyItemList();
+                                pak.NPCID = 0;
+                                pak.BuyItemIndex = (ushort)gift.id;
+                                pak.BuyCount = 1;
+                                GameNetSystem.Instance.SendInfo(pak);
+                            }
+                        });
+                    }
+                    else
+                    {
+                        C0803_tagCBuyItemList pak = new C0803_tagCBuyItemList();
+                        pak.NPCID = 0;
+                        pak.BuyItemIndex = (ushort)gift.id;
+                        pak.BuyCount = 1;
+                        GameNetSystem.Instance.SendInfo(pak);
+                    }
+                }
+            }
+            else
+            {
+                SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
+            }
+
+        }
+
+        public bool HasNotBuyGift()
+        {
+            OperationBase operationBase;
+            OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase);
+            if (operationBase != null && operationBase.InTime(TimeUtility.ServerNow))
+            {
+                OperationFlashSale operation = operationBase as OperationFlashSale;
+                OperationFlashSale.FlashSale flashShop;
+                if (operation.TryGetFlashSale(TimeUtility.ServerNow, out flashShop))
+                {
+                    for (int i = 0; i < flashShop.gifts.Length; i++)
+                    {
+                        var gift = flashShop.gifts[i];
+                        var buyInfo = storeModel.GetBuyShopLimit((uint)gift.id);
+                        if (buyInfo == null || buyInfo.BuyCnt < gift.limitNum)
+                        {
+                            return true;
+                        }
+                    }
+                }
+            }
+            return false;
+        }
+
+        public Redpoint flashSaleRedpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20904);
+
+        public event Action<int> onStateUpate;
+
+        private void UpdateRedpoint()
+        {
+            flashSaleRedpoint.state = RedPointState.None;
+            if (IsOpen && HasNotBuyGift() && !DayRemind.Instance.GetDayRemind(DayRemind.FLASHSALE_REDPOINT))
+            {
+                flashSaleRedpoint.state = RedPointState.Simple;
+            }
         }
     }
 }
diff --git a/System/OpenServerActivity/FlashRushToBuyWin.cs b/System/OpenServerActivity/FlashRushToBuyWin.cs
index 061be22..0d49e82 100644
--- a/System/OpenServerActivity/FlashRushToBuyWin.cs
+++ b/System/OpenServerActivity/FlashRushToBuyWin.cs
@@ -12,7 +12,7 @@
         [SerializeField] Text moneyNumText;
 
         StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } }
-        FlashSaleModel model { get { return ModelCenter.Instance.GetModel<FlashSaleModel>(); } }
+        FlashRushToBuyModel rushToBuyModel { get { return ModelCenter.Instance.GetModel<FlashRushToBuyModel>(); } }
 
         #region Built-in
         protected override void BindController()
@@ -36,7 +36,7 @@
 
         protected override void OnAfterOpen()
         {
-            model.SetDayRemind();
+            rushToBuyModel.SetDayRemind();
         }
 
         protected override void OnPreClose()
@@ -70,12 +70,7 @@
 
         public void CreateSaleItem(CellView cellView)
         {
-            OperationBase operationBase;
-            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashRushToBuy, out operationBase))
-            {
-                OperationFlashRushToBuy operation = operationBase as OperationFlashRushToBuy;
-                OperationFlashRushToBuy.FlashSale flashSale;
-            }
+           
         }
 
         private void OperationTimeUpdateEvent(Operation type)
diff --git a/System/OpenServerActivity/FlashSaleItemCell.cs b/System/OpenServerActivity/FlashSaleItemCell.cs
index 7c86f6e..558a48d 100644
--- a/System/OpenServerActivity/FlashSaleItemCell.cs
+++ b/System/OpenServerActivity/FlashSaleItemCell.cs
@@ -8,14 +8,34 @@
     {
         [SerializeField] CommonItemBaisc itemBaisc;
         [SerializeField] Text originalPrice;
+        [SerializeField] Image originalMoneyIcon;
         [SerializeField] Text presentPrice;
+        [SerializeField] Image presentMoneyIcon;
         [SerializeField] Image stateImg;
         [SerializeField] Button flashSaleBtn;
         [SerializeField] Text btnStateText;
 
+        FlashRushToBuyModel rushToBuyModel { get { return ModelCenter.Instance.GetModel<FlashRushToBuyModel>(); } }
+        StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } }
+
         public override void Refresh(CellView cell)
         {
-           
+            if (rushToBuyModel.presentFlashSale.Equals(default(OperationFlashRushToBuy.FlashSale))) return;
+
+            var saleItem = rushToBuyModel.presentFlashSale.gifts[cell.index];
+            originalMoneyIcon.SetIconWithMoneyType(saleItem.moneyType);
+            presentMoneyIcon.SetIconWithMoneyType(saleItem.moneyType);
+            originalPrice.text = saleItem.moneyOriginal.ToString();
+            presentPrice.text = saleItem.moneyNumber.ToString();
+
+            var buyInfo = storeModel.GetBuyShopLimit((uint)saleItem.id);
+            var buyCount = 0;
+            if (buyInfo != null)
+            {
+                buyCount = buyInfo.BuyCnt;
+            }
+            stateImg.gameObject.SetActive(buyCount >= saleItem.limitNum);
+            flashSaleBtn.gameObject.SetActive(buyCount < saleItem.limitNum);
         }
     }
 }

--
Gitblit v1.8.0