private void OnEnable() { _cam = Camera.main.transform; _user = StreamClient.Instance; _links = LinkManager.Instance as LinkManager; _plots = PlotManager.Instance as PlotManager; _webclients = WebClientManager.Instance as WebClientManager; // use timeout when creating links Link.AllModelChange() .Where(ev => ev.Model.CreatedBy == _user.Id && ev.ChangedProperties.Contains("CreatedBy")) .Subscribe(ev => { _isCreatingLink = true; ResetProgress(); ev.Model.CreatedByRx .Where(v => v < 0) .Take(1) .Delay(TimeSpan.FromSeconds(1)) .Subscribe(v => _isCreatingLink = false, () => _isCreatingLink = false); }); _user.LookingAtIdRx .TakeUntilDisable(this) .ObserveOnMainThread() .Subscribe(_ => ResetProgress()); _user.LookingAtTypeRx .TakeUntilDisable(this) .ObserveOnMainThread() .Subscribe(_ => ResetProgress()); Link.AllModelChange() .TakeUntilDisable(this) .Where(ev => ev.Model.CreatedBy == _user.Id) .Subscribe(_ => ResetProgress()); // disable & reset progress during zen mode _user.ZenModeRx .TakeUntilDisable(this) .Where(v => v && !(_tablet && _tablet.IsVoiceActive)) .ObserveOnMainThread() .Subscribe(_ => ResetProgress()); Plot.AllModelChange() .TakeUntilDisable(this) .Where(ev => ev.ChangedProperties.Contains("BoundTo") && _tablet != null && ev.Model.BoundTo == _tablet.Id) .Subscribe(_ => ResetProgress()); WebClient.AllModelChange() .TakeUntilDisable(this) .Where(ev => ev.ChangedProperties.Contains("Owner")) .Subscribe(ev => SearchCurrentTablet()); Observable.Merge(WebClient.ModelCreated(), WebClient.ModelDestroyed()) .TakeUntilDisable(this) .Subscribe(m => SearchCurrentTablet()); }