using Core.Utilities;
using System.Collections.Generic;
using KTGMGemClient;
using UnityEngine;
using TowerDefense.Towers;
namespace TowerDefense.Level
{
///
/// 无尽模式buff管理器
///
public class EndlessBuffManager : Singleton
{
///
/// 玩家拥有的buff列表
///
public List BuffList;
protected override void Awake()
{
base.Awake();
BuffList = new List();
}
///
/// 玩家获得一个buff
///
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);
if (!EndlessRandomTower.instance.RandomPlaceTower(newTower, buff.Config.buff_effect[1] - 1, 0))
EndlessLevelManager.instance.Currency.AddCurrency(buff.Config.buff_effect[2]);
break;
}
return;
}
BuffList.Add(buff);
}
///
/// 直接从buff列表中移除某一个buff
///
///
public void RemoveBuff(EndlessBuffConfig buff)
{
BuffList.Remove(buff);
}
///
/// 更新buff列表,以波为单位,一个波次结束后调用此方法去更新buff列表
/// 这个方法主要是处理buff的生命周期,把无效的移除掉
///
/// 一次更新的波数,默认以一波为一个节点去更新
public void UpdateBuffList(int waves = 1)
{
int len = BuffList.Count;
for (int i = 0; i < len; ++i)
{
if (BuffList[i].LifeCycleType == EndlessBuffLifeCycleType.LimitedWave)
{
BuffList[i].TackEffectWaves += waves;
if (BuffList[i].TackEffectWaves >= BuffList[i].TotalEffectWaves)
{
// 超过波次数量限制,移除掉
BuffList.Remove(BuffList[i]);
len = BuffList.Count;
}
}
}
}
///
/// 根据buff效果类型获得buff列表数据
///
/// buff效果类型
/// 宝石技能id
public List GetBuffListByEffectType(EndlessBuffEffectType type, int id)
{
List ret = new List();
// 暂且先这么处理吧 如果1:火 2:水 3:木
int attributeId = (int)Mathf.Floor(id / 10000f);
for (int i = 0; i < BuffList.Count; ++i)
{
if (BuffList[i].EffectType == type)
{
bool isWork = false;
switch (BuffList[i].UseTarget)
{
case EndlessBuffUseTarget.All:
isWork = true;
break;
case EndlessBuffUseTarget.Element:
isWork = attributeId == BuffList[i].Config.target_type[1];
break;
case EndlessBuffUseTarget.Designated:
isWork = id == BuffList[i].Config.target_type[1];
break;
}
if (isWork)
ret.Add(BuffList[i]);
}
}
return ret;
}
}
}