Client LuaCsForBarotrauma
CharacterAbilityApplyStatusEffectsToRandomAlly.cs
2 using Microsoft.Xna.Framework;
3 using System;
4 using System.Linq;
5 
6 namespace Barotrauma.Abilities
7 {
9  {
10  private readonly float squaredMaxDistance;
11  private readonly bool allowDifferentSub;
12  private readonly bool allowSelf;
13 
14  public override bool AllowClientSimulation => false;
15 
16  public CharacterAbilityApplyStatusEffectsToRandomAlly(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement)
17  {
18  squaredMaxDistance = MathF.Pow(abilityElement.GetAttributeFloat("maxdistance", float.MaxValue), 2);
19  allowDifferentSub = abilityElement.GetAttributeBool("mustbeonsamesub", true);
20  allowSelf = abilityElement.GetAttributeBool("allowself", true);
21  }
22 
23  protected override void ApplyEffect()
24  {
26  }
27 
28  protected override void ApplyEffect(AbilityObject abilityObject)
29  {
30  if ((abilityObject as IAbilityCharacter)?.Character is Character targetCharacter)
31  {
32  ApplyEffect(targetCharacter);
33  }
34  else
35  {
37  }
38  }
39 
40  private void ApplyEffect(Character thisCharacter)
41  {
42  Character chosenCharacter =
43  Character.GetFriendlyCrew(thisCharacter).Where(c =>
44  (allowSelf || c != thisCharacter) &&
45  (allowDifferentSub || c.Submarine == Character.Submarine) &&
46  Vector2.DistanceSquared(thisCharacter.WorldPosition, c.WorldPosition) is float tempDistance &&
47  tempDistance < squaredMaxDistance).GetRandomUnsynced();
48  if (chosenCharacter == null) { return; }
49 
50  ApplyEffectSpecific(chosenCharacter);
51 
52  }
53  }
54 }
void ApplyEffectSpecific(Character targetCharacter, Limb targetLimb=null)
CharacterAbilityApplyStatusEffectsToRandomAlly(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement)
static IEnumerable< Character > GetFriendlyCrew(Character character)
float GetAttributeFloat(string key, float def)
bool GetAttributeBool(string key, bool def)
virtual Vector2 WorldPosition
Definition: Entity.cs:49
Submarine Submarine
Definition: Entity.cs:53