From 344267a8edb7bc6eaa67a0493292f438d31ca20e Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Tue, 17 Nov 2020 21:10:57 +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