JinChanChan/Assets/Scripts/Game/Buff/FactionBuffManager.cs

136 lines
4.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System.Collections.Generic;
namespace Game
{
public class FactionBuffManager
{
private Dictionary<string, Buff> activeBuffs; // 激活的buff列表
public FactionBuffManager()
{
activeBuffs = new Dictionary<string, Buff>();
}
// 处理职业或种族buff的激活
public void CheckBuffs(List<Character> characters)
{
Dictionary<string, int> countByFaction = new Dictionary<string, int>();
// 统计每个职业/种族的数量
foreach (var character in characters)
{
foreach (var faction in character.Config.Professions) // 职业/种族
{
if (!countByFaction.ContainsKey(faction))
{
countByFaction[faction] = 0;
}
countByFaction[faction]++;
}
}
// 遍历每个职业/种族查看是否满足Buff的条件
foreach (var entry in countByFaction)
{
string factionName = entry.Key;
int count = entry.Value;
// 如果满足Buff条件就激活Buff
Buff factionBuff = GetBuffByFaction(factionName, count);
if (factionBuff != null)
{
if (!activeBuffs.ContainsKey(factionName))
{
activeBuffs.Add(factionName, factionBuff);
ApplyBuffToCharacters(factionBuff, characters);
}
}
else
{
// 如果该buff不再满足条件则去除
if (activeBuffs.ContainsKey(factionName))
{
activeBuffs.Remove(factionName);
RemoveBuffFromCharacters(factionName, characters);
}
}
}
}
// 根据职业/种族数量获取对应的Buff
private Buff GetBuffByFaction(string factionName, int count)
{
// 你可以根据预设的条件例如战士类英雄数量达到3个给全体战士加护甲等来决定返回哪个Buff
if (factionName == "战士" && count >= 3)
{
return new Buff("战士Buff", "战士增加30%护甲", new List<BuffEffect>
{
new BuffEffect(BuffEffectType.Armor, 0.3f, true)
});
}
return null;
}
private void ApplyBuffToCharacters(Buff buff, List<Character> characters)
{
foreach (var character in characters)
{
// 遍历角色的Factions如果该角色属于该buff的职业/种族应用buff
if (character.Config.Professions.Name.Contains(buff.Name))
{
foreach (var effect in buff.Effects)
{
ApplyEffectToCharacter(effect, character);
}
}
}
}
private void RemoveBuffFromCharacters(string factionName, List<Character> characters)
{
// 遍历角色并移除buff的效果
foreach (var character in characters)
{
if (character.Config.Professions.Name.Contains(factionName))
{
foreach (var effect in activeBuffs[factionName].Effects)
{
RemoveEffectFromCharacter(effect, character);
}
}
}
}
private void ApplyEffectToCharacter(BuffEffect effect, Character character)
{
switch (effect.EffectType)
{
case BuffEffectType.AttackDamage:
character.OtherAttackDamage +=
effect.IsPercentage ? character.OtherAttackDamage * effect.Value : effect.Value;
break;
case BuffEffectType.Armor:
character.OtherArmor += effect.IsPercentage ? character.OtherArmor * effect.Value : effect.Value;
break;
// 其他效果的处理逻辑...
}
}
private void RemoveEffectFromCharacter(BuffEffect effect, Character character)
{
switch (effect.EffectType)
{
case BuffEffectType.AttackDamage:
character.OtherAttackDamage -=
effect.IsPercentage ? character.OtherAttackDamage * effect.Value : effect.Value;
break;
case BuffEffectType.Armor:
character.OtherArmor -= effect.IsPercentage ? character.OtherArmor * effect.Value : effect.Value;
break;
// 其他效果的移除逻辑...
}
}
}
}