Client LuaCsForBarotrauma
CharacterAbilityApplyStatusEffectsToNearestAlly.cs
1 using Microsoft.Xna.Framework;
2 using System;
3 
4 namespace Barotrauma.Abilities
5 {
7  {
8  protected float squaredMaxDistance;
9  public CharacterAbilityApplyStatusEffectsToNearestAlly(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement)
10  {
11  squaredMaxDistance = MathF.Pow(abilityElement.GetAttributeFloat("maxdistance", float.MaxValue), 2);
12  }
13 
14  protected override void ApplyEffect()
15  {
16  Character closestCharacter = null;
17  float closestDistance = float.MaxValue;
18 
19  foreach (Character crewCharacter in Character.GetFriendlyCrew(Character))
20  {
21  if (crewCharacter != Character && Vector2.DistanceSquared(Character.WorldPosition, crewCharacter.WorldPosition) is float tempDistance && tempDistance < closestDistance)
22  {
23  closestCharacter = crewCharacter;
24  closestDistance = tempDistance;
25  }
26  }
27 
28  if (closestDistance < squaredMaxDistance)
29  {
30  ApplyEffectSpecific(closestCharacter);
31  }
32  }
33  }
34 }
void ApplyEffectSpecific(Character targetCharacter, Limb targetLimb=null)
CharacterAbilityApplyStatusEffectsToNearestAlly(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement)
static IEnumerable< Character > GetFriendlyCrew(Character character)
float GetAttributeFloat(string key, float def)
virtual Vector2 WorldPosition
Definition: Entity.cs:49