Files
Cielonos/Assets/Scripts/MainGame/Characters/Player/Items/Submodules/AttributeSubmodule.cs
SoulliesOfficial f26f9fd374 爆更
2026-03-20 12:07:44 -04:00

47 lines
2.3 KiB
C#

using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace Cielonos.MainGame.Characters.Inventory
{
public class AttributeSubmodule : SubmoduleBase<ItemBase>
{
public Dictionary<string, float> numericChange;
public Dictionary<string, float> percentageChangeOfAccumulation;
public Dictionary<string, float> percentageChangeOfMultiplication;
public AttributeSubmodule(ItemBase owner, AttributeData data) : base(owner)
{
this.numericChange = new Dictionary<string, float>(data.chaAttrNumericChange);
this.percentageChangeOfAccumulation = new Dictionary<string, float>(data.chaAttrPercentageChangeOfAccumulation);
this.percentageChangeOfMultiplication = new Dictionary<string, float>(data.chaAttrPercentageChangeOfMultiplication);
}
public void GetAttributeChanges(string attributeName, out float numeric, out float pAccumulation, out float pMultiplication)
{
numeric = numericChange.GetValueOrDefault(attributeName, 0f);
pAccumulation = percentageChangeOfAccumulation.GetValueOrDefault(attributeName, 0f);
pMultiplication = percentageChangeOfMultiplication.GetValueOrDefault(attributeName, 1f);
}
public void ApplyAttributeChanges(string attributeName, ref float numeric, ref float pAccumulation, ref float pMultiplication)
{
numeric += numericChange.GetValueOrDefault(attributeName, 0f);
pAccumulation += percentageChangeOfAccumulation.GetValueOrDefault(attributeName, 0f);
pMultiplication *= percentageChangeOfMultiplication.GetValueOrDefault(attributeName, 1f);
}
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 => owner.player.attributeSm.RefreshAttribute(attr));
return modifiedAttributes;
}
}
}