using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace Continentis.MainGame.Character
{
public partial class CharacterBuffBase
{
public abstract class CharacterBuffSubmodule : BuffSubmodule
{
public CharacterBase character => (buff as CharacterBuffBase)?.attachedCharacter;
protected CharacterBuffSubmodule(CharacterBuffBase buff) : base(buff)
{
}
}
///
/// Buff的角色通常属性调整模块
///
public class GeneralAttributeSubmodule : CharacterBuffSubmodule
{
public Dictionary numericChange;
public Dictionary percentageChangeOfAccumulation;
public Dictionary percentageChangeOfMultiplication;
public GeneralAttributeSubmodule(CharacterBuffBase buff) : base(buff)
{
this.numericChange = new Dictionary();
this.percentageChangeOfAccumulation = new Dictionary();
this.percentageChangeOfMultiplication = new Dictionary();
}
public List RefreshAllModifiedAttributes()
{
List modifiedAttributes = new List();
modifiedAttributes.AddRange(numericChange.Select(kvp => kvp.Key));
modifiedAttributes.AddRange(percentageChangeOfAccumulation.Select(kvp => kvp.Key));
modifiedAttributes.AddRange(percentageChangeOfMultiplication.Select(kvp => kvp.Key));
modifiedAttributes.ForEach(attr => character.attributeSubmodule.RefreshGeneralAttribute(attr));
return modifiedAttributes;
}
}
///
/// Buff的角色状态调整模块
///
public class StatusSubmodule : CharacterBuffSubmodule
{
public List statusList;
public StatusSubmodule(CharacterBuffBase buff, params StatusType[] statusTypes) : base(buff)
{
statusList = statusTypes.ToList();
}
///
/// 将Buff内含的状态添加到角色身上(1层)
///
public void AddStatus()
{
statusList.ForEach(status => character.statusSubmodule.AddStatus(status));
}
///
/// 将Buff内含的状态从角色身上移除(1层),注意,如果某个状态有其它的来源,这个状态的效果仍然存在。
///
public void RemoveStatus()
{
statusList.ForEach(status => character.statusSubmodule.RemoveStatus(status));
}
}
}
}