using System.Collections.Generic; using System.Linq; using UnityEngine; namespace Cielonos.MainGame.Characters.Inventory { public class AttributeSubmodule : SubmoduleBase { public Dictionary numericChange; public Dictionary percentageChangeOfAccumulation; public Dictionary percentageChangeOfMultiplication; public AttributeSubmodule(ItemBase owner, AttributeData data) : base(owner) { this.numericChange = new Dictionary(data.chaAttrNumericChange); this.percentageChangeOfAccumulation = new Dictionary(data.chaAttrPercentageChangeOfAccumulation); this.percentageChangeOfMultiplication = new Dictionary(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 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 => owner.player.attributeSm.RefreshAttribute(attr)); return modifiedAttributes; } } }