using System.Collections.Generic; using System.Linq; using UnityEngine; namespace Cielonos.MainGame.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.numericChange); this.percentageChangeOfAccumulation = new Dictionary(data.percentageChangeOfAccumulation); this.percentageChangeOfMultiplication = new Dictionary(data.percentageChangeOfMultiplication); } 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; } } }