using System.Collections.Generic;
|
using UnityEngine;
|
|
/**
|
* 无尽模式buff数据表处理类
|
* @Author: chenxin
|
* @Date: 2020-10-15 17:24:10
|
*/
|
namespace KTGMGemClient
|
{
|
/// <summary>
|
/// 自定义数据结构,用于管理buff的生命周期
|
/// </summary>
|
public class EndlessBuffConfig
|
{
|
/// <summary>
|
/// 表配置数据
|
/// </summary>
|
public endless_buff Config;
|
|
/// <summary>
|
/// 作用对象类型
|
/// </summary>
|
public EndlessBuffUseTarget UseTarget;
|
|
/// <summary>
|
/// buff效果类型
|
/// </summary>
|
public EndlessBuffEffectType EffectType;
|
|
/// <summary>
|
/// buff生命周期类型
|
/// </summary>
|
public EndlessBuffLifeCycleType LifeCycleType;
|
|
/// <summary>
|
/// buff已经生效的波次数,以波为单位
|
/// </summary>
|
public int TackEffectWaves;
|
|
/// <summary>
|
/// 可生效总波数,生命周期类型为n波内生效才有作用,否则没有意义
|
/// </summary>
|
public int TotalEffectWaves;
|
}
|
|
public class EndlessBuffData
|
{
|
/// <summary>
|
/// 无尽模式buff配置表
|
/// </summary>
|
private static List<endless_buff> endlessBuffList;
|
|
/// <summary>
|
/// 所有的配置,不管关卡等级的限制
|
/// </summary>
|
private static List<EndlessBuffConfig> allEndlessConfig;
|
|
/// <summary>
|
/// 当前关卡可用的buff池,需要使用关卡等级来初始化,随机buff数据使用这个
|
/// </summary>
|
private static List<EndlessBuffConfig> endlessBuffPool;
|
|
private static System.Random random;
|
|
/// <summary>
|
/// 保存随机出来的buff列表
|
/// </summary>
|
private static List<EndlessBuffConfig> randomBuffList;
|
|
/// <summary>
|
/// 颜色品阶
|
/// </summary>
|
/// <typeparam name="Color"></typeparam>
|
/// <returns></returns>
|
private static List<Color> rareColorList = new List<Color>()
|
{
|
new Color(118 / 255f, 1, 118 / 255f),
|
new Color(131 / 255f, 181 / 255f, 1),
|
new Color(220 / 255f, 112 / 255f, 1),
|
};
|
|
public static void Init()
|
{
|
endlessBuffList = JsonDataCenter.GetList<endless_buff>();
|
allEndlessConfig = new List<EndlessBuffConfig>();
|
randomBuffList = new List<EndlessBuffConfig>();
|
random = new System.Random();
|
|
foreach (endless_buff data in endlessBuffList)
|
{
|
EndlessBuffConfig newConfig = new EndlessBuffConfig();
|
newConfig.Config = data;
|
newConfig.UseTarget = (EndlessBuffUseTarget)data.target_type[0];
|
newConfig.EffectType = (EndlessBuffEffectType)data.buff_effect[0];
|
|
if (data.scope == -1)
|
// 从游戏开始始终生效
|
newConfig.LifeCycleType = EndlessBuffLifeCycleType.Always;
|
else if (data.scope == 0)
|
// 只会生效一次,而且是立即生效
|
newConfig.LifeCycleType = EndlessBuffLifeCycleType.Once;
|
else if (data.scope > 0)
|
{
|
// 生效 n 波
|
newConfig.LifeCycleType = EndlessBuffLifeCycleType.LimitedWave;
|
newConfig.TotalEffectWaves = data.scope;
|
}
|
allEndlessConfig.Add(newConfig);
|
}
|
}
|
|
/// <summary>
|
/// 初始化当前关卡的buff池
|
/// </summary>
|
/// <param name="level">关卡等级</param>
|
public static void InitEndlessBuffPool(int level)
|
{
|
if (level <= 0)
|
{
|
Debug.LogError("--------------------- 错误的关卡等级 ---------------------");
|
return;
|
}
|
|
endlessBuffPool = new List<EndlessBuffConfig>();
|
|
for (int i = 0; i < allEndlessConfig.Count; ++i)
|
{
|
if (level >= allEndlessConfig[i].Config.down_level && level <= allEndlessConfig[i].Config.upper_level)
|
endlessBuffPool.Add(allEndlessConfig[i]);
|
}
|
}
|
|
/// <summary>
|
/// 获取随机数量的buff列表
|
/// </summary>
|
/// <param name="num"></param>
|
/// <returns></returns>
|
public static List<EndlessBuffConfig> GetRandomBuffList(int num = 3)
|
{
|
List<EndlessBuffConfig> ret = new List<EndlessBuffConfig>();
|
|
if (num > endlessBuffPool.Count)
|
{
|
Debug.LogError("--------------------- 数量超出了buff池中的数量 ---------------------");
|
return ret;
|
}
|
|
while (num > 0)
|
{
|
int index = random.Next(endlessBuffPool.Count);
|
ret.Add(endlessBuffPool[index]);
|
endlessBuffPool.Remove(endlessBuffPool[index]);
|
--num;
|
}
|
|
for (int i = 0; i < ret.Count; ++i)
|
{
|
endlessBuffPool.Add(ret[i]);
|
}
|
|
randomBuffList = ret;
|
|
return ret;
|
}
|
|
/// <summary>
|
/// 根据点击的索引获得buff数据
|
/// </summary>
|
/// <param name="index"></param>
|
public static EndlessBuffConfig GetBuffByIndex(int index)
|
{
|
return randomBuffList[index];
|
}
|
|
/// <summary>
|
/// 根据品质获得颜色值
|
/// </summary>
|
/// <param name="rare"></param>
|
/// <returns></returns>
|
public static Color GetColorByRare(int rare)
|
{
|
return rareColorList[rare - 1];
|
}
|
}
|
}
|