From 40b918d5189a154bc0ff31627e69867742934720 Mon Sep 17 00:00:00 2001
From: chenxin <chenxin6991@163.com>
Date: Tue, 17 Nov 2020 21:10:05 +0800
Subject: [PATCH] buff补充

---
 Assets/Scripts/TowerDefense/Level/EndlessBuff/EndlessBuffManager.cs |   71 ++++++++++++++++++++++++-----------
 1 files changed, 48 insertions(+), 23 deletions(-)

diff --git a/Assets/Scripts/TowerDefense/Level/EndlessBuffManager.cs b/Assets/Scripts/TowerDefense/Level/EndlessBuff/EndlessBuffManager.cs
similarity index 65%
rename from Assets/Scripts/TowerDefense/Level/EndlessBuffManager.cs
rename to Assets/Scripts/TowerDefense/Level/EndlessBuff/EndlessBuffManager.cs
index 08d6592..a4278db 100644
--- a/Assets/Scripts/TowerDefense/Level/EndlessBuffManager.cs
+++ b/Assets/Scripts/TowerDefense/Level/EndlessBuff/EndlessBuffManager.cs
@@ -1,10 +1,8 @@
 using Core.Utilities;
 using System.Collections.Generic;
-using KTGMGemClient;
 using UnityEngine;
-using TowerDefense.Towers;
 
-namespace TowerDefense.Level
+namespace KTGMGemClient
 {
     /// <summary>
     /// 无尽模式buff管理器
@@ -16,9 +14,28 @@
         /// </summary>
         public List<EndlessBuffConfig> BuffList;
 
+        /// <summary>
+        /// buff处理类实例列表
+        /// </summary>
+        private List<EndlessBuff> instanceList;
+
         private void Start()
         {
             BuffList = new List<EndlessBuffConfig>();
+            // 新增buff,需要把实例添加进来
+            instanceList = new List<EndlessBuff>()
+            {
+                // 攻击力增加的buff没有什么需要处理的,如果需要新写个类继承EndlessBuff即可
+                new EndlessBuff(),
+                new GoldAdd(),
+                new ObtainTower(),
+                new DecreaseTowerAttackCD(),
+                new CritProbabilityAdd(),
+                new CritDamageAdd(),
+                new CritBulletAdd(),
+                new SlowDown(),
+                new FireRateAdd()
+            };
         }
 
         /// <summary>
@@ -26,28 +43,24 @@
         /// </summary>
         public void AddBuff(EndlessBuffConfig buff)
         {
-            if (buff.LifeCycleType == EndlessBuffLifeCycleType.Once)
-            {
-                switch (buff.EffectType)
-                {
-                    case EndlessBuffEffectType.Gold:
-                        // 一次性增加金币
-                        EndlessLevelManager.instance.Currency.AddCurrency(buff.Config.buff_effect[1]);
-                        break;
-                    case EndlessBuffEffectType.ObtainTower:
-                        // 是否到了技能时间
-                        bool canSkill = EndlessUIStart.instance.GameStartTime <= EndlessRandomTower.SKILL_TOWER_TIME;
-                        Tower newTower = EndlessRandomTower.instance.GetRandomTower(canSkill);
+            ++buff.SelectCount;
 
-                        if (!EndlessRandomTower.instance.RandomPlaceTower(newTower, buff.Config.buff_effect[1] - 1, 0))
-                            EndlessLevelManager.instance.Currency.AddCurrency(buff.Config.buff_effect[2]);
-                        break;
-                }
-
-                return;
-            }
+            // 0表示只要被选择过,以后就不再出现了
+            if (buff.Config.is_repeated == 0)
+                EndlessBuffData.RemoveFromBuffPool(buff.Config.id);
 
             BuffList.Add(buff);
+            EndlessBuff endlessBuff = GetBuffInstanceByType((EndlessBuffEffectType)buff.Config.buff_effect[0]);
+
+            endlessBuff.BuffList.Add(buff);
+            endlessBuff.Handle();
+
+            // 如果是一次性生效的buff,直接移除掉
+            if (buff.LifeCycleType == EndlessBuffLifeCycleType.Once)
+            {
+                endlessBuff.BuffList.Remove(buff);
+                RemoveBuff(buff);
+            }
         }
 
         /// <summary>
@@ -57,6 +70,8 @@
         public void RemoveBuff(EndlessBuffConfig buff)
         {
             BuffList.Remove(buff);
+            EndlessBuff endlessBuff = GetBuffInstanceByType((EndlessBuffEffectType)buff.Config.buff_effect[0]);
+            endlessBuff.LoseEffect();
         }
 
         /// <summary>
@@ -77,7 +92,7 @@
                     if (BuffList[i].TackEffectWaves >= BuffList[i].TotalEffectWaves)
                     {
                         // 超过波次数量限制,移除掉
-                        BuffList.Remove(BuffList[i]);
+                        RemoveBuff(BuffList[i]);
                         len = BuffList.Count;
                     }
                 }
@@ -123,5 +138,15 @@
 
             return ret;
         }
+
+        /// <summary>
+        /// 根据buff类型获得buff处理类实例
+        /// </summary>
+        /// <param name="type"></param>
+        /// <returns></returns>
+        public EndlessBuff GetBuffInstanceByType(EndlessBuffEffectType type)
+        {
+            return instanceList[(int)type - 1];
+        }
     }
 }
\ No newline at end of file

--
Gitblit v1.9.1