Server LuaCsForBarotrauma
RemoteController.cs
1 using Microsoft.Xna.Framework;
2 
4 {
6  {
7  [Serialize("", IsPropertySaveable.No, description: "Tag or identifier of the item that should be controlled.")]
8  public Identifier Target
9  {
10  get;
11  private set;
12  }
13 
14  [Serialize(false, IsPropertySaveable.No)]
15  public bool OnlyInOwnSub
16  {
17  get;
18  private set;
19  }
20 
21  [Serialize(10000.0f, IsPropertySaveable.No)]
22  public float Range
23  {
24  get;
25  private set;
26  }
27 
28  public Item TargetItem { get => currentTarget; }
29 
30  private Item currentTarget;
31  private Character currentUser;
32  private Submarine currentSub;
33 
35  : base(item, element)
36  {
37  }
38 
39  public override bool Select(Character character)
40  {
41  if (base.Select(character))
42  {
43  FindTarget(character);
44  return true;
45  }
46  return false;
47  }
48 
49  public override void Equip(Character character)
50  {
51  FindTarget(character);
52  }
53 
54  public override void Update(float deltaTime, Camera cam)
55  {
56  base.Update(deltaTime, cam);
57  if (currentTarget.Removed ||
58  item.Submarine != currentSub ||
59  Vector2.DistanceSquared(currentTarget.WorldPosition, item.WorldPosition) > Range * Range)
60  {
61  FindTarget(currentUser);
62  }
63  }
64 
65  private void FindTarget(Character user)
66  {
67  currentTarget = null;
68  if (user == null || (item.Submarine == null && OnlyInOwnSub))
69  {
70  IsActive = false;
71  return;
72  }
73 
74  float closestDist = float.PositiveInfinity;
75  foreach (Item targetItem in Item.ItemList)
76  {
77  if (targetItem.NonInteractable || targetItem.NonPlayerTeamInteractable || targetItem.IsHidden) { continue; }
78  if (OnlyInOwnSub)
79  {
80  if (targetItem.Submarine != item.Submarine) { continue; }
81  if (targetItem.Submarine.TeamID != user.TeamID) { continue; }
82  }
83  if (!targetItem.HasTag(Target) && ((MapEntity)targetItem).Prefab.Identifier != Target) { continue; }
84 
85  float distSqr = Vector2.DistanceSquared(item.WorldPosition, targetItem.WorldPosition);
86  if (distSqr > Range * Range || distSqr > closestDist) { continue; }
87 
88  currentTarget = targetItem;
89  currentSub = item.Submarine;
90  closestDist = distSqr;
91  currentUser = user;
92  }
93  IsActive = currentTarget != null;
94  }
95  }
96 }
Submarine Submarine
Definition: Entity.cs:53
bool NonPlayerTeamInteractable
Use IsPlayerInteractable to also check NonInteractable
static readonly List< Item > ItemList
The base class for components holding the different functionalities of the item
RemoteController(Item item, ContentXElement element)
override void Update(float deltaTime, Camera cam)
override bool Select(Character character)
override void Equip(Character character)
bool IsHidden
Is the entity hidden due to HiddenInGame being enabled or the layer the entity is in being hidden?
Definition: MapEntity.cs:211