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 CoreAttributeSubmodule : CharacterBuffSubmodule { public Dictionary numericChange; public Dictionary percentageChangeOfAccumulation; public Dictionary percentageChangeOfMultiplication; public CoreAttributeSubmodule(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.RefreshCoreAttribute(attr)); character.attributeSubmodule.RefreshAllGeneralAttributes(); //刷新核心属性后,需要刷新通用属性 return modifiedAttributes; } } /// /// 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)); } } } }