116 lines
4.8 KiB
C#
116 lines
4.8 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using SLSFramework.General;
|
|
using Unity.VisualScripting;
|
|
using UnityEngine;
|
|
|
|
namespace Continentis.MainGame.Card
|
|
{
|
|
public partial class AttributeSubmodule : SubmoduleBase<CardInstance>
|
|
{
|
|
public AttributeGroup attributeGroup;
|
|
|
|
public AttributeSubmodule(CardInstance card) : base(card)
|
|
{
|
|
Initialize(card.cardData);
|
|
}
|
|
|
|
private void Initialize(CardData cardData)
|
|
{
|
|
Dictionary<string, float> originalAttributes = new Dictionary<string, float>(cardData.originalAttributes);
|
|
Dictionary<string, string> endowingAttributes = new Dictionary<string, string>(cardData.runtimeCurrentAttributes);
|
|
|
|
if (cardData.upgradeNode is { isInfiniteUpgrade: true })
|
|
{
|
|
foreach (KeyValuePair<string, float> upgrade in cardData.upgradeNode.GetUpgradeAttributes(owner.upgradeLevel))
|
|
{
|
|
originalAttributes.ModifyOrAdd(upgrade.Key, upgrade.Value);
|
|
}
|
|
}
|
|
|
|
foreach (KeyValuePair<string, float> 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);
|
|
attributeGroup.ApplyAllAttributes();
|
|
}
|
|
}
|
|
|
|
public partial class AttributeSubmodule
|
|
{
|
|
/// <summary>
|
|
/// 刷新单个属性
|
|
/// </summary>
|
|
/// <param name="attributeName">属性名称</param>
|
|
public void RefreshAttribute(string attributeName)
|
|
{
|
|
attributeGroup.ResetAttribute(attributeName);
|
|
owner.ApplyAttributeChangesByCard();
|
|
owner.user.combatBuffSubmodule.GetGeneralAttributeChange(attributeName, out float cha_numeric, out float cha_pAccumulation, out float cha_pMultiplication);
|
|
owner.combatBuffSubmodule.GetAttributeChange(attributeName, out float card_numeric, out float card_pAccumulation, out float card_pMultiplication);
|
|
float final_numeric = cha_numeric + card_numeric;
|
|
float final_pAccumulation = cha_pAccumulation + card_pAccumulation;
|
|
float final_pMultiplication = cha_pMultiplication * card_pMultiplication;
|
|
attributeGroup.ModifyAttribute(attributeName, final_numeric, final_pAccumulation, final_pMultiplication);
|
|
string displayAttributeName = "Display" + attributeName;
|
|
if(attributeGroup.current.ContainsKey(displayAttributeName))
|
|
{
|
|
attributeGroup.SetAttribute(displayAttributeName, attributeGroup.current[attributeName]);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 刷新所有属性
|
|
/// </summary>
|
|
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);
|
|
string displayAttributeName = "Display" + attributeName;
|
|
if(attributeGroup.current.ContainsKey(displayAttributeName))
|
|
{
|
|
attributeGroup.SetAttribute(displayAttributeName, attributeGroup.current[attributeName]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
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);
|
|
}
|
|
} |