swb_player/PlayerBase.MovementImpacts.cs
using SWB.Shared;
using System.Collections.Generic;
namespace SWB.Player;
public partial class PlayerBase
{
List<MovementImpact> movementImpacts = new();
float movementImpact;
public virtual void ApplyMovementImpact( MovementImpact impact )
{
movementImpacts.Add( impact );
}
public virtual void HandleMovementImpacts()
{
movementImpact = 1;
if ( movementImpacts.Count == 0 ) return;
if ( !IsAlive )
{
movementImpacts.Clear();
return;
}
for ( int i = movementImpacts.Count - 1; i >= 0; i-- )
{
var impact = movementImpacts[i];
if ( impact.Duration <= 0f )
{
movementImpacts.RemoveAt( i );
continue;
}
movementImpact *= impact.Amount;
}
}
}