Client LuaCsForBarotrauma
CharacterAbilityApplyStatusEffectsToAllies.cs
1 using Microsoft.Xna.Framework;
2 using System.Collections.Immutable;
3 
4 namespace Barotrauma.Abilities
5 {
7  {
8  private readonly bool allowSelf;
9  private readonly float maxDistance = float.MaxValue;
10  private readonly bool inSameRoom;
11  private readonly ImmutableHashSet<Identifier> jobIdentifiers;
12 
13  public override bool AllowClientSimulation { get; }
14 
15  public CharacterAbilityApplyStatusEffectsToAllies(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement)
16  {
17  allowSelf = abilityElement.GetAttributeBool("allowself", true);
18  maxDistance = abilityElement.GetAttributeFloat("maxdistance", float.MaxValue);
19  inSameRoom = abilityElement.GetAttributeBool("insameroom", false);
20  jobIdentifiers = abilityElement.GetAttributeIdentifierImmutableHashSet("jobs", ImmutableHashSet<Identifier>.Empty);
21  AllowClientSimulation = abilityElement.GetAttributeBool("allowclientsimulation", true);
22  }
23 
24 
25  protected override void ApplyEffect()
26  {
27  foreach (Character character in Character.GetFriendlyCrew(Character))
28  {
29  if (!allowSelf && character == Character) { continue; }
30 
31  if (!jobIdentifiers.IsEmpty)
32  {
33  bool hadJob = false;
34  foreach (Identifier job in jobIdentifiers)
35  {
36  if (character.HasJob(job.Value))
37  {
38  hadJob = true;
39  break;
40  }
41  }
42 
43  if (!hadJob) { continue; }
44  }
45 
46  if (inSameRoom && !character.IsInSameRoomAs(Character))
47  {
48  continue;
49  }
50 
51  if (maxDistance < float.MaxValue)
52  {
53  if (Vector2.DistanceSquared(character.WorldPosition, Character.WorldPosition) > maxDistance * maxDistance) { continue; }
54  }
55  ApplyEffectSpecific(character);
56  }
57  }
58 
59  protected override void ApplyEffect(AbilityObject abilityObject)
60  {
61  ApplyEffect();
62  }
63 
64  }
65 }
void ApplyEffectSpecific(Character targetCharacter, Limb targetLimb=null)
CharacterAbilityApplyStatusEffectsToAllies(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement)
static IEnumerable< Character > GetFriendlyCrew(Character character)
bool HasJob(string identifier)
bool IsInSameRoomAs(Character character)
Check if the character is in the same room Room and hull differ in that a room can consist of multipl...
float GetAttributeFloat(string key, float def)
bool GetAttributeBool(string key, bool def)
ImmutableHashSet< Identifier > GetAttributeIdentifierImmutableHashSet(string key, ImmutableHashSet< Identifier >? def, bool trim=true)
virtual Vector2 WorldPosition
Definition: Entity.cs:49