using System.Collections.Generic; using System.Linq; using SLSFramework.General; using Unity.VisualScripting; using UnityEngine; namespace Continentis.MainGame.Card { public partial class AttributeSubmodule : SubmoduleBase { public AttributeGroup attributeGroup; public AttributeSubmodule(CardLogicBase card) : base(card) { Initialize(card.cardData); } private void Initialize(CardData cardData) { Dictionary originalAttributes = new Dictionary(cardData.originalAttributes); Dictionary endowingAttributes = new Dictionary(cardData.runtimeCurrentAttributes); if (cardData.upgradeNode is { isInfiniteUpgrade: true }) { foreach (KeyValuePair upgrade in cardData.upgradeNode.GetUpgradeAttributes(owner.upgradeLevel)) { originalAttributes.ModifyOrAdd(upgrade.Key, upgrade.Value); } } foreach (KeyValuePair attribute in cardData.variableAttributes) { string baseName = "Base" + attribute.Key; originalAttributes.Add(baseName, attribute.Value); string mainName = attribute.Key; endowingAttributes.Add(mainName, baseName); string baseOffset = "Base" + attribute.Key + "Offset"; endowingAttributes.Add(baseOffset, "0"); string displayName = "Display" + attribute.Key; endowingAttributes.Add(displayName, baseName); } attributeGroup = new AttributeGroup(originalAttributes, endowingAttributes); } } public partial class AttributeSubmodule { /// /// 刷新单个属性 /// /// 属性名称 public void RefreshAttribute(string attributeName) { attributeGroup.ResetAttribute(attributeName); owner.ApplyAttributeChangesByCard(); owner.combatBuffSubmodule.GetAttributeChange(attributeName, out float numeric, out float pAccumulation, out float pMultiplication); attributeGroup.ModifyAttribute(attributeName, numeric, pAccumulation, pMultiplication); } /// /// 刷新所有属性 /// public void RefreshAllAttributes() { foreach (string attributeName in attributeGroup.original.Keys.ToList()) { attributeGroup.ResetAttribute(attributeName); } owner.ApplyAttributeChangesByCard(); foreach (string attributeName in attributeGroup.current.Keys.ToList()) { owner.combatBuffSubmodule.GetAttributeChange(attributeName, out float numeric, out float pAccumulation, out float pMultiplication); attributeGroup.ModifyAttribute(attributeName, numeric, pAccumulation, pMultiplication); } } } public partial class AttributeSubmodule { public float GetCurrentAttribute(string attributeName, float defaultValue = 0) { return attributeGroup.current.GetValueOrDefault(attributeName, defaultValue); } public int GetRoundCurrentAttribute(string attributeName, int defaultValue = 0) { return attributeGroup.current.GetRoundValue(attributeName, defaultValue); } } public partial class AttributeSubmodule { public int targetCount => GetRoundCurrentAttribute("TargetCount", -2); } }