109 lines
4.4 KiB
C#
109 lines
4.4 KiB
C#
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)
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Buff的角色核心属性调整模块
|
||
/// </summary>
|
||
public class CoreAttributeSubmodule : CharacterBuffSubmodule
|
||
{
|
||
public Dictionary<string, float> numericChange;
|
||
public Dictionary<string, float> percentageChangeOfAccumulation;
|
||
public Dictionary<string, float> percentageChangeOfMultiplication;
|
||
|
||
public CoreAttributeSubmodule(CharacterBuffBase buff) : base(buff)
|
||
{
|
||
this.numericChange = new Dictionary<string, float>();
|
||
this.percentageChangeOfAccumulation = new Dictionary<string, float>();
|
||
this.percentageChangeOfMultiplication = new Dictionary<string, float>();
|
||
}
|
||
|
||
public List<string> RefreshAllModifiedAttributes()
|
||
{
|
||
List<string> modifiedAttributes = new List<string>();
|
||
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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Buff的角色通常属性调整模块
|
||
/// </summary>
|
||
public class GeneralAttributeSubmodule : CharacterBuffSubmodule
|
||
{
|
||
public Dictionary<string, float> numericChange;
|
||
public Dictionary<string, float> percentageChangeOfAccumulation;
|
||
public Dictionary<string, float> percentageChangeOfMultiplication;
|
||
|
||
public GeneralAttributeSubmodule(CharacterBuffBase buff) : base(buff)
|
||
{
|
||
this.numericChange = new Dictionary<string, float>();
|
||
this.percentageChangeOfAccumulation = new Dictionary<string, float>();
|
||
this.percentageChangeOfMultiplication = new Dictionary<string, float>();
|
||
}
|
||
|
||
public List<string> RefreshAllModifiedAttributes()
|
||
{
|
||
List<string> modifiedAttributes = new List<string>();
|
||
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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Buff的角色状态调整模块
|
||
/// </summary>
|
||
public class StatusSubmodule : CharacterBuffSubmodule
|
||
{
|
||
public List<StatusType> statusList;
|
||
|
||
public StatusSubmodule(CharacterBuffBase buff, params StatusType[] statusTypes) : base(buff)
|
||
{
|
||
statusList = statusTypes.ToList();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 将Buff内含的状态添加到角色身上(1层)
|
||
/// </summary>
|
||
public void AddStatus()
|
||
{
|
||
statusList.ForEach(status => character.statusSubmodule.AddStatus(status));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 将Buff内含的状态从角色身上移除(1层),注意,如果某个状态有其它的来源,这个状态的效果仍然存在。
|
||
/// </summary>
|
||
public void RemoveStatus()
|
||
{
|
||
statusList.ForEach(status => character.statusSubmodule.RemoveStatus(status));
|
||
}
|
||
}
|
||
}
|
||
}
|