Files
Continentis/Assets/Scripts/MainGame/Character/CharacterBuff/BuffSubmodules.cs

79 lines
2.9 KiB
C#
Raw Normal View History

2025-10-03 00:02:43 -04:00
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 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));
}
}
}
}