/// <summary> /// Verify that the subscribed clients are still in range of the interface. /// </summary> private void CheckRange(BoundUserInterface ui) { // We have to cache the set of sessions because Unsubscribe modifies the original. _sessionCache.Clear(); _sessionCache.AddRange(ui.SubscribedSessions); var transform = ui.Owner.Owner.Transform; var uiPos = transform.WorldPosition; var uiMap = transform.MapID; foreach (var session in _sessionCache) { var attachedEntity = session.AttachedEntity; // The component manages the set of sessions, so this invalid session should be removed soon. if (attachedEntity == null || !attachedEntity.IsValid()) { continue; } if (uiMap != attachedEntity.Transform.MapID) { ui.Close(session); continue; } var distanceSquared = (uiPos - attachedEntity.Transform.WorldPosition).LengthSquared; if (distanceSquared > MaxWindowRangeSquared) { ui.Close(session); } } }
public void CloseSurgeryUI(IPlayerSession session) { _userInterface.Close(session); }
public void CloseInterface(IPlayerSession session) { _position = null; _userInterface.Close(session); Resync(); }