Files
Cielonos/Assets/Scripts/MainGame/Characters/Base/Submodules/AdditionalForceSubmodule.cs
SoulliesOfficial 50ee502684 完善
2026-02-13 09:22:11 -05:00

50 lines
1.9 KiB
C#

using SLSUtilities.General;
using UnityEngine;
namespace Cielonos.MainGame.Characters
{
public class AdditionalForceSubmodule : SubmoduleBase<MovementSubcontrollerBase>
{
private CharacterBase character => owner.owner;
public LerpVector3 additionalForceXZ;
public LerpFloat additionalForceY;
public AdditionalForceSubmodule(MovementSubcontrollerBase movementSc) : base(movementSc)
{
additionalForceXZ = new LerpVector3(Vector3.zero, 1f);
additionalForceY = new LerpFloat(0f, 1f);
}
public void AddForce(Vector3 force, bool ignoreResistance = false)
{
float multiplier = 1f;
// 如果是“击退”类攻击(不忽略抗性)
if (!ignoreResistance)
{
float resistance = character.attributeSm["ImpactResistance"];
multiplier = Mathf.Clamp01(1f - (resistance / 100f));
}
additionalForceXZ.currentValue += force.Flatten() * multiplier;
additionalForceY.currentValue += force.y * multiplier;
}
public void Update(float stability)
{
// 这里的 LerpVector3 应该是自定义的类。
// 建议确保衰减速度受 stability 影响,阻力大的怪不仅飞不远,停下的也快。
float decaySpeed = stability / 10f;
additionalForceXZ.Update(decaySpeed * character.selfTimeSm.DeltaTime);
if(additionalForceXZ.currentValue.magnitude < 0.01f)
{
additionalForceXZ.currentValue = Vector3.zero;
}
additionalForceY.Update(decaySpeed * character.selfTimeSm.DeltaTime);
if(additionalForceY.currentValue < 0.01f)
{
additionalForceY.currentValue = 0;
}
}
}
}