35 lines
1.3 KiB
C#
35 lines
1.3 KiB
C#
using Microsoft.Xna.Framework;
|
|
using System.Collections.Generic;
|
|
using System.Xml.Linq;
|
|
|
|
namespace Barotrauma.Abilities
|
|
{
|
|
class CharacterAbilityApplyForce : CharacterAbility
|
|
{
|
|
private readonly float impulseStrength;
|
|
private readonly float maxVelocity;
|
|
|
|
private readonly string afflictionIdentifier;
|
|
public override bool AppliesEffectOnIntervalUpdate => true;
|
|
public CharacterAbilityApplyForce(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
|
|
{
|
|
impulseStrength = abilityElement.GetAttributeFloat("impulsestrength", 0f);
|
|
maxVelocity = abilityElement.GetAttributeFloat("maxvelocity", 10f);
|
|
|
|
afflictionIdentifier = abilityElement.GetAttributeString("afflictionidentifier", "");
|
|
}
|
|
|
|
protected override void ApplyEffect()
|
|
{
|
|
Affliction affliction = Character.CharacterHealth.GetAffliction(afflictionIdentifier);
|
|
|
|
if (affliction == null) { return; }
|
|
|
|
foreach (Limb limb in Character.AnimController.Limbs)
|
|
{
|
|
limb.body.ApplyForce(Vector2.Normalize(limb.Mass * Character.AnimController.TargetMovement) * impulseStrength * (affliction.Strength / affliction.Prefab.MaxStrength), maxVelocity);
|
|
}
|
|
}
|
|
}
|
|
}
|