Files
Cielonos/Assets/Scripts/MainGame/AttackArea/AttackData/AttackData.cs
SoulliesOfficial 9a9e48f8a5
2026-06-27 12:52:03 -04:00

79 lines
2.5 KiB
C#

using System.Collections.Generic;
using Cielonos.MainGame.Characters;
using Sirenix.OdinInspector;
using SLSUtilities.General;
using SLSUtilities.FunctionalAnimation;
using UnityEngine;
namespace Cielonos.MainGame
{
[CreateAssetMenu(fileName = "Attack", menuName = "Cielonos/Items/AttackData")]
public class AttackData : SerializedScriptableObject
{
public GameObject defaultHitVFX;
[Title("Default Weapon Parameters")]
[LabelText("攻击力")]
public float startDamage;
[LabelText("攻击力标准差")]
public float damageDeviation;
[LabelText("暴击率")]
public float criticalChance;
[LabelText("暴击倍率")]
public float criticalMultiplier;
[LabelText("基础削韧值")]
public float startStanceDepletion;
public AttackUnit DefaultAttackUnit => attackUnits.Count == 1 ? attackUnits.Values.GetEnumerator().Current : null;
[DictionaryDrawerSettings(KeyLabel = "Attack Unit", DisplayMode = DictionaryDisplayOptions.ExpandedFoldout)]
[Searchable]
public Dictionary<string, AttackUnit> attackUnits = new Dictionary<string, AttackUnit>();
public AttackUnit this[string unitName] => attackUnits[unitName];
private void OnEnable()
{
UpdateUnits();
}
private void OnValidate()
{
UpdateUnits();
}
[OnInspectorGUI("UpdateUnits")]
public void UpdateUnits()
{
foreach (KeyValuePair<string, AttackUnit> pair in attackUnits)
{
string unitName = pair.Key;
AttackUnit unit = pair.Value;
unit.parentData = this;
unit.unitName = unitName;
if (!unit.overrideParameters)
{
unit.startDamage = startDamage * unit.damageCorrectionMultiplier;
unit.damageDeviation = damageDeviation;
unit.criticalChance = criticalChance;
unit.criticalMultiplier = criticalMultiplier;
unit.stanceDepletion = startStanceDepletion * unit.stanceDepletionCorrectionMultiplier;
}
if (unit.submodules != null)
{
foreach (AttackUnit.Submodule module in unit.submodules)
{
module.SetOwner(unit);
}
}
}
}
}
}