少年修仙传客户端代码仓库
Client_PangDeRong
2018-10-16 526fca39ebb6193e1c5d3b5f55f2f5f1dbb902f7
4074 【前端】限时抢购开发
4个文件已修改
159 ■■■■ 已修改文件
System/KnapSack/KnapsackTimeCDMgr.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FlashRushToBuyCoolDown.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FlashRushToBuyModel.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FlashSaleItemCell.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/KnapsackTimeCDMgr.cs
@@ -9,6 +9,7 @@
    public class KnapsackTimeCDMgr : SingletonMonobehaviour<KnapsackTimeCDMgr>
    {
        private List<ItemCDCool> itemCDList = new List<ItemCDCool>();
        private List<NormalCDCool> normalCDList = new List<NormalCDCool>();
        public event Action<string> RefresCoolTimeAct;
        public event Action<string> RefreshItemOverdueTimeAct;
        public event Action<string> RefreshItemOverdueAct;
@@ -18,6 +19,12 @@
        {
            CheckItemCoolTime(TimeRefreshType.Frame);
            var minute = DateTime.Now.Minute;
            var second = DateTime.Now.Second;
            if(second != secondBuf)
            {
                CheckNormalCoolTime(TimeRefreshType.Second);
                secondBuf = second;
            }
            if (minute != minuteBuf)
            {
                CheckItemCoolTime(TimeRefreshType.Minute);
@@ -61,6 +68,33 @@
        }
        private void CheckNormalCoolTime(TimeRefreshType type)
        {
            for (int i = 0; i < normalCDList.Count; i++)
            {
                double remianCD = normalCDList[i].GetRemainTime();
                switch (type)
                {
                    case TimeRefreshType.Frame:
                        break;
                    case TimeRefreshType.Second:
                        if(normalCDList[i].func != null)
                        {
                            normalCDList[i].func(normalCDList[i].code,(int)remianCD);
                        }
                        break;
                    case TimeRefreshType.Minute:
                        break;
                }
                if (remianCD <= 0)
                {
                    UnRegister(normalCDList[i].code);
                }
            }
        }
        public void Register(string guid,int itemId,double cdTime)
        {
            int index;
@@ -75,12 +109,35 @@
            }
        }
        public void Register(int code,double cdTime,Action<int,int> func)
        {
            int index;
            if (ContainsNormalCD(code, out index))
            {
                normalCDList[index].SetTime(cdTime);
            }
            else
            {
                NormalCDCool cool = new NormalCDCool(code,cdTime,func);
                normalCDList.Add(cool);
            }
        }
        public void UnRegister(string guid)
        {
            int index;
            if (ContainsItemCD(guid, out index))
            {
                itemCDList.RemoveAt(index);
            }
        }
        public void UnRegister(int code)
        {
            int index;
            if (ContainsNormalCD(code, out index))
            {
                normalCDList.RemoveAt(index);
            }
        }
@@ -92,6 +149,16 @@
                return itemCDList[index];
            }
            return null;
        }
        public int GetNormalCDTime(int code)
        {
            int index;
            if (ContainsNormalCD(code, out index))
            {
                return (int)normalCDList[index].GetRemainTime();
            }
            return 0;
        }
        List<ItemCDCool> typeCoollist = new List<ItemCDCool>();
@@ -127,6 +194,20 @@
            return false;
        }
        private bool ContainsNormalCD(int code,out int index)
        {
            index = 0;
            for (int i = 0; i < normalCDList.Count; i++)
            {
                if (normalCDList[i].code == code)
                {
                    index = i;
                    return true;
                }
            }
            return false;
        }
        public enum TimeRefreshType
        {
            Frame, //每帧
@@ -166,4 +247,35 @@
        }
    }
    public class NormalCDCool
    {
        public int code;
        public double totalTime;
        public DateTime startTime { get; private set; }
        public Action<int,int> func;
        public NormalCDCool(int code,double totalTime,Action<int,int> func)
        {
            this.code = code;
            this.totalTime = totalTime;
            this.startTime = DateTime.Now;
            this.func = func;
        }
        public void SetTime(double totalTime)
        {
            this.totalTime = totalTime;
            this.startTime = DateTime.Now;
        }
        public double GetRemainTime()
        {
            double remainTime = totalTime - (DateTime.Now - startTime).TotalSeconds;
            if (remainTime <= 0)
            {
                remainTime = 0;
            }
            return remainTime;
        }
    }
}
System/OpenServerActivity/FlashRushToBuyCoolDown.cs
@@ -11,11 +11,6 @@
        [SerializeField] Text timeText;
        FlashRushToBuyModel rushToBuyModel { get { return ModelCenter.Instance.GetModel<FlashRushToBuyModel>(); } }
        bool isReplace = false;
        bool isStartReplace = false;
        private void Awake()
        {
            GlobalTimeEvent.Instance.halfMinuteEvent += UpdateHalfMinute;
        }
        private void OnEnable()
        {
@@ -29,12 +24,6 @@
            GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
        }
        private void UpdateHalfMinute()
        {
            if (!isStartReplace) return;
            isReplace = !isReplace;
        }
        private void SecondEvent()
        {
@@ -49,7 +38,6 @@
            OperationTime operationTime;
            OperationFlashRushToBuy.FlashSaleShop saleShop;
            FlashRushToBuyModel.FlashRushToBuySate flashState = rushToBuyModel.GetActivityState(out seconds,out operationTime,out saleShop);
            isStartReplace = false;
            switch (flashState)
            {
                case FlashRushToBuyModel.FlashRushToBuySate.NoOpen:
@@ -57,8 +45,8 @@
                case FlashRushToBuyModel.FlashRushToBuySate.InAdvance:
                    if(seconds <= 3600)
                    {
                        isStartReplace = true;
                        if(!isReplace)
                        int split = (3600 - seconds)/30 % 2;
                        if(split == 0)
                        {
                            timeText.text = Language.Get("FlashRushToBuy106", TimeUtility.SecondsToHMS(seconds));
                        }
System/OpenServerActivity/FlashRushToBuyModel.cs
@@ -162,6 +162,10 @@
            for (int i = 0; i < appointmentInfo.GoodsCount; i++)
            {
                var saleItemInfo = appointmentInfo.GoodsList[i];
                if (appointmentInfo.GoodsCount < 2 && saleItemInfo.State == 1)
                {
                    SysNotifyMgr.Instance.ShowTip("FlashRushToBuy1");
                }
                for (int j = 0; j < operation.flashShops.Count; j++)
                {
                    var saleItems = operation.flashShops[j].items;
System/OpenServerActivity/FlashSaleItemCell.cs
@@ -29,7 +29,8 @@
        OperationFlashRushToBuy.FlashSaleItem saleItem;
        int buyState = -1;
        float cdTime = 10;
        int cdTime = 0;
        int code = 0;
        private void OnEnable()
        {
            battleModel.RefreshGameRecInfoAct += UpdateFullServerBuy;
@@ -51,6 +52,7 @@
            if (rushToBuyModel.presentFlashShop == null) return;
            saleItem = rushToBuyModel.presentFlashShop.items[cell.index];
            code = rushToBuyModel.presentFlashShop.dayIndex * 1000 + rushToBuyModel.presentFlashShop.timeIndex * 100 + cell.index;
            ItemCellModel cellModel = new ItemCellModel(saleItem.itemId,true,(ulong)saleItem.itemCount,saleItem.isBind);
            itemBaisc.Init(cellModel);
            itemBaisc.cellBtn.RemoveAllListeners();
@@ -87,6 +89,12 @@
        private void UpdateAppointmentInfo(int shopGuid)
        {
            if (saleItem == null || shopGuid != saleItem.shopGuid) return;
            if(saleItem.isAppointment == 1)
            {
                cdTime = 10;
                KnapsackTimeCDMgr.Instance.Register(code, cdTime, RefreshCD);
            }
            UpdateSaleItem();
        }
@@ -104,42 +112,44 @@
            btnBgImg.SetSprite("SecondBtn1");
            btnStateText.gameObject.SetActive(true);
            cdText.gameObject.SetActive(false);
            btnBgImg.material = MaterialUtility.GetUIDefaultGraphicMaterial();
            switch (buyState)
            {
                case -1:
                    if(saleItem.isAppointment == 0)
                    {
                        cdTime = 10;
                        btnStateText.text = Language.Get("FlashRushToBuy101");
                        flashSaleBtn.AddListener(() => { rushToBuyModel.SendFlashSaleAppointment(saleItem.shopGuid, 1); });
                    }
                    else
                    {
                        btnBgImg.SetSprite("BlackBtn");
                        RefreshCD(code,KnapsackTimeCDMgr.Instance.GetNormalCDTime(code));
                        btnStateText.gameObject.SetActive(false);
                        cdText.gameObject.SetActive(true);
                        btnBgImg.SetSprite("BlackBtn");
                        RefreshCD(cdTime);
                        TimeDownMgr.Instance.Begin(TimeDownMgr.CoolTimeType.FlashRushToBuyAppointment,cdTime, RefreshCD);
                        flashSaleBtn.AddListener(CancelAppointment);
                    }
                    break;
                case 0:
                    cdTime = 10;
                    btnStateText.text = Language.Get("FlashRushToBuy102");
                    flashSaleBtn.AddListener(() => { storeModel.SendBuyShopItem(storeConfig,saleItem.itemCount); });
                    break;
            }
        }
        private void RefreshCD(float time)
        private void RefreshCD(int code,int time)
        {
            if (this.code != code) return;
            cdTime = time;
            if (cdTime <= 0)
            {
                btnBgImg.material = MaterialUtility.GetUIDefaultGraphicMaterial();
                cdText.text = Language.Get("FlashRushToBuy103");
            }
            else
            {
                btnBgImg.material = MaterialUtility.GetDefaultSpriteGrayMaterial();
                cdText.text = Language.Get("FlashRushToBuy104",time);
            }
        }
@@ -161,7 +171,8 @@
        {
            int fullSeverRemain = 0;
            int sellState = GetSellSate(out fullSeverRemain);
            fullServerRemainNum.text = fullSeverRemain.ToString();
            string fullSeverRemainStr = fullSeverRemain > 0 ? fullSeverRemain.ToString() : UIHelper.GetTextColorByItemColor(TextColType.Red, fullSeverRemain.ToString());
            fullServerRemainNum.text = fullSeverRemainStr;
            switch (sellState)
            {
                case 0: