private void OnDisable()
        {
            disposables?.Clear();

            control.Opened        -= OpenShop;
            control.Closed        -= CloseShop;
            shop.BuildingSelected -= OnBuildingSelected;

            selector.Placed         -= OnPlaced;
            constructor.Constructed -= OnConstructed;
        }
 public void Clear()
 {
     var d = new CompositeDisposable (Disposable.Empty);
     Assert.AreEqual (1, d.Count, "#1");
     d.Clear ();
     Assert.AreEqual (0, d.Count, "#2");
 }
示例#3
0
        void CreateOrReuseView(IConnection connection, ViewWithData data, Action <IView> onViewLoad)
        {
            IUIController controller;
            var           exists = reusableControllers.TryGetValue(data.MainFlow, out controller);

            if (!exists)
            {
                IsBusy = true;

                Action <IView> handler = view =>
                {
                    disposablesForCurrentView?.Clear();

                    var action = view.ViewModel as ICanNavigate;
                    if (action != null)
                    {
                        disposablesForCurrentView.Add(action?.Navigate.Subscribe(d =>
                        {
                            LoadView(connection, d, onViewLoad);
                        }));
                    }
                    onViewLoad?.Invoke(view);
                };

                controller = CreateController(connection, data, handler);
                reusableControllers.Add(data.MainFlow, controller);
            }

            Push(controller);

            if (exists)
            {
                Reload();
            }
        }
示例#4
0
        public override void OnRemove()
        {
            showLevelCompleteSignal.RemoveListener(OnShow);
            hideLevelCompleteSignal.RemoveListener(OnHide);

            _subscriptions?.Clear();
        }
示例#5
0
        public override void OnRemove()
        {
            showMenuSignal.RemoveListener(OnShow);
            hideMenuSignal.RemoveListener(OnHide);

            _subscriptions?.Clear();
        }
示例#6
0
        private void Clear()
        {
            view.TimerText           = String.Empty;
            view.StarComponent.Stars = 0;
            view.CollectedText       = "0/0";

            view.TopPanelPool.ReleaseAllInstances();
            view.GameFieldPool.ReleaseAllInstances();
            view.AnimatedPool.ReleaseAllInstances();

            _subscriptions?.Clear();
            _animatedItems.Clear();

            foreach (var sequence in _sequences)
            {
                sequence.Kill();
            }
            _sequences.Clear();
        }
示例#7
0
 void TerminateShell()
 {
     rePoolingSubs.Clear();
     GameObjectPooler.Current.PoolObject(this.gameObject);
 }
 public void Dispose()
 {
     disposables.Clear();
 }
示例#9
0
    public override void OnEnable()
    {
        base.OnEnable();

        contentSwitchComponents.OnAdd().Subscribe(entity =>
        {
            var contentSwitchComponent = entity.GetComponent <ContentSwitchComponent>();
            var viewComponent          = entity.GetComponent <ViewComponent>();
            var rectTransform          = viewComponent.Transforms[0] as RectTransform;
            var width          = Display.displays[Mathf.Clamp(contentSwitchComponent.TargetDisplay, 0, Display.displays.Length - 1)].renderingWidth;
            var height         = Display.displays[Mathf.Clamp(contentSwitchComponent.TargetDisplay, 0, Display.displays.Length - 1)].renderingHeight;
            var switchDisposer = new CompositeDisposable();
            var targetPosition = Vector3.zero;
            var xMultiplier    = 1f;
            var yMultiplier    = 1f;

            contentSwitchComponent.ScreenSize.DistinctUntilChanged().Subscribe(size =>
            {
                xMultiplier = width / size.x;
                yMultiplier = height / size.y;

                targetPosition          = new Vector3(contentSwitchComponent.Offset.x * xMultiplier, contentSwitchComponent.Offset.y * yMultiplier, 0);
                rectTransform.sizeDelta = new Vector2(contentSwitchComponent.Size.x * xMultiplier, contentSwitchComponent.Size.y * yMultiplier);
                rectTransform.position  = targetPosition;
            }).AddTo(this.Disposer).AddTo(contentSwitchComponent.Disposer);

            for (int i = 0; i < viewComponent.Transforms[0].childCount; i++)
            {
                var go = viewComponent.Transforms[0].GetChild(i).gameObject;
                contentSwitchComponent.Contents.Add(go);
                go.SetActive(false);
            }

            EventSystem.Publish(new ContentInitialEvent(contentSwitchComponent, -1, 0));

            Observable.EveryUpdate().Where(_ => !contentSwitchComponent.IsPlaying && contentSwitchComponent.Direction != Vector2.zero).Subscribe(__ =>
            {
                var nextIndex      = contentSwitchComponent.Contents[0].activeSelf ? 1 : 0;
                var index          = nextIndex == 0 ? 1 : 0;
                var originPosition = targetPosition - new Vector3(contentSwitchComponent.Direction.x * contentSwitchComponent.Size.x * xMultiplier, contentSwitchComponent.Direction.y * contentSwitchComponent.Size.y * yMultiplier, 0);
                var offset         = targetPosition - originPosition;
                var time           = 0f;

                contentSwitchComponent.Contents[nextIndex].transform.position = originPosition;
                EventSystem.Publish(new ContentSwitchStartEvent(contentSwitchComponent, index, nextIndex));
                contentSwitchComponent.Contents[nextIndex].SetActive(true);

                Observable.EveryUpdate().SkipWhile(_ => contentSwitchComponents.Entities.Where(e => e.GetComponent <ContentSwitchComponent>().ID == contentSwitchComponent.ID).Any(e => !e.GetComponent <ContentSwitchComponent>().IsReady)).Subscribe(_ =>
                {
                    contentSwitchComponent.Contents[nextIndex].transform.position = Vector3.Lerp(originPosition, targetPosition, contentSwitchComponent.EaseCurve.Evaluate(time));
                    contentSwitchComponent.Contents[index].transform.position     = contentSwitchComponent.Contents[nextIndex].transform.position + offset;
                    EventSystem.Publish(new ContentSwitchStayEvent(contentSwitchComponent, index, nextIndex));
                    if (time == 1)
                    {
                        EventSystem.Publish(new ContentSwitchCompletedEvent(contentSwitchComponent, index, nextIndex));
                        contentSwitchComponent.Contents[index].SetActive(false);
                        contentSwitchComponent.Direction = Vector2.zero;
                        contentSwitchComponent.IsPlaying = false;
                        switchDisposer.Clear();
                    }
                    time = Mathf.Clamp01(time + contentSwitchComponent.Speed * Time.deltaTime);
                }).AddTo(this.Disposer).AddTo(contentSwitchComponent.Disposer).AddTo(switchDisposer);
                contentSwitchComponent.IsPlaying = true;
                contentSwitchComponent.Direction = Vector2.zero;
            }).AddTo(this.Disposer).AddTo(contentSwitchComponent.Disposer);
        }).AddTo(this.Disposer);

        EventSystem.OnEvent <LidarSwipeEvent>().Subscribe(evt =>
        {
            var list = contentSwitchComponents.Entities.Select(e => e.GetComponent <ContentSwitchComponent>()).Where(contentSwitchComponent => contentSwitchComponent.ID == evt.ID);
            if (list.All(contentSwitchComponent => !contentSwitchComponent.IsPlaying))
            {
                foreach (var contentSwitchComponent in list)
                {
                    contentSwitchComponent.Direction = evt.Distance;
                }
            }
        }).AddTo(this.Disposer);
    }
示例#10
0
 void OnDestroy()
 {
     _destroyDispose.Clear();
 }
示例#11
0
 protected override void OnDisappearing()
 {
     base.OnDisappearing();
     EventSubscriptions.Clear();
 }
示例#12
0
    //private void OnDisable()
    //{
    //    _disposables.Dispose();
    //}

    private void OnDestroy()
    {
        _isEnable = false;
        _disposables.Dispose();
        _disposables.Clear();
    }
示例#13
0
 private void OnDestroy()
 {
     Disposables.Clear();
 }
示例#14
0
 public void LeaveMainGame()
 {
     mLife.Clear();
 }
示例#15
0
 /// <summary>
 /// Cancle all runnining streams, clearing _queHistory
 /// </summary>
 public void Cancle()
 {
     _queHistory.Clear();
     _tail = null;
 }
示例#16
0
 public void OnDespawned()
 {
     gameObject.SetActive(false);
     _disposables.Clear();
 }
示例#17
0
 public override void ViewWillDisappear(bool animated)
 {
     base.ViewWillDisappear(animated);
     disposeBag.Clear();
 }
示例#18
0
        protected override void OnDisappearing()
        {
            SubscriptionDisposables.Clear();

            base.OnDisappearing();
        }
        public void Dispose()
        {
            CompositeDisposable.Clear();

            _components.Clear();
        }
示例#20
0
        void RunView(UIViewType viewType, ViewWithData arg = null)
        {
            if (requestedTarget?.ViewType == viewType || (requestedTarget?.ViewType == UIViewType.None && requestedTarget?.MainFlow == CurrentFlow))
            {
                arg = requestedTarget;
            }

            if (arg == null)
            {
                arg = new ViewWithData {
                    ActiveFlow = activeFlow, MainFlow = selectedFlow, ViewType = viewType
                }
            }
            ;
            bool firstTime = CreateViewAndViewModel(viewType, arg);
            var  view      = GetObjectsForFlow(activeFlow)[viewType].View;

            transition.OnNext(new LoadData
            {
                Flow = activeFlow,
                View = view,
                Data = arg
            });

            // controller might have been stopped in the OnNext above
            if (IsStopped)
            {
                return;
            }

            // if it's not the first time we've shown this view, no need
            // to set it up
            if (!firstTime)
            {
                return;
            }

            SetupView(viewType, view.ViewModel);
        }

        void SetupView(UIViewType viewType, IViewModel viewModel)
        {
            var list      = GetObjectsForFlow(activeFlow);
            var pair      = list[viewType];
            var hasDone   = viewModel as IHasDone;
            var hasCancel = viewModel as IHasCancel;

            // 2FA is set up when login is set up, so nothing to do
            if (viewType == UIViewType.TwoFactor)
            {
                return;
            }

            // we're setting up the login dialog, we need to setup the 2fa as
            // well to continue the flow if it's needed, since the
            // authenticationresult callback won't happen until
            // everything is done
            if (viewType == UIViewType.Login)
            {
                var pair2fa = list[UIViewType.TwoFactor];
                pair2fa.AddHandler(((IDialogViewModel)pair2fa.ViewModel).WhenAny(x => x.IsShowing, x => x.Value)
                                   .Where(x => x)
                                   .ObserveOn(RxApp.MainThreadScheduler)
                                   .Subscribe(_ => Fire(Trigger.Next)));

                pair2fa.AddHandler(((IHasCancel)pair2fa.ViewModel).Cancel
                                   .ObserveOn(RxApp.MainThreadScheduler)
                                   .Subscribe(_ => Fire(uiStateMachine.CanFire(Trigger.Cancel) ? Trigger.Cancel : Trigger.Finish)));

                if (hasDone != null)
                {
                    pair.AddHandler(hasDone.Done
                                    .ObserveOn(RxApp.MainThreadScheduler)
                                    .Subscribe(_ => Fire(Trigger.Finish)));
                }
            }
            else if (hasDone != null)
            {
                pair.AddHandler(hasDone.Done
                                .ObserveOn(RxApp.MainThreadScheduler)
                                .Subscribe(_ => Fire(uiStateMachine.CanFire(Trigger.Next) ? Trigger.Next : Trigger.Finish)));
            }

            if (hasCancel != null)
            {
                pair.AddHandler(hasCancel.Cancel
                                .ObserveOn(RxApp.MainThreadScheduler)
                                .Subscribe(_ => Fire(uiStateMachine.CanFire(Trigger.Cancel) ? Trigger.Cancel : Trigger.Finish)));
            }
        }

        /// <summary>
        /// Creates View/ViewModel instances for the specified <paramref name="viewType"/> if they
        /// haven't been created yet in the current flow
        /// </summary>
        /// <param name="viewType"></param>
        /// <returns>true if the View/ViewModel didn't exist and had to be created</returns>
        bool CreateViewAndViewModel(UIViewType viewType, ViewWithData data = null)
        {
            var list = GetObjectsForFlow(activeFlow);

            if (viewType == UIViewType.Login)
            {
                if (!list.ContainsKey(viewType))
                {
                    var d = factory.CreateViewAndViewModel(UIViewType.TwoFactor);
                    list.Add(UIViewType.TwoFactor, d);
                }
            }

            // 2fa view/viewmodel is created when login is created 'cause login needs the 2fa viewmodel
            // so the only thing we want to do is connect the viewmodel to the view when it's showing
            else if (viewType == UIViewType.TwoFactor)
            {
                var d = list[viewType];
                if (d.View.ViewModel == null)
                {
                    d.ViewModel.Initialize(data);
                    d.View.DataContext = d.ViewModel;
                }
            }

            IUIPair pair      = null;
            var     firstTime = !list.TryGetValue(viewType, out pair);

            if (firstTime)
            {
                pair = factory.CreateViewAndViewModel(viewType);
            }

            pair.ViewModel.Initialize(data);

            if (firstTime)
            {
                pair.View.DataContext = pair.ViewModel;
                list.Add(viewType, pair);
            }

            return(firstTime);
        }

        /// <summary>
        /// Returns the view/viewmodel pair for a given flow
        /// </summary>
        Dictionary <UIViewType, IUIPair> GetObjectsForFlow(UIControllerFlow flow)
        {
            Dictionary <UIViewType, IUIPair> list;

            if (!uiObjects.TryGetValue(flow, out list))
            {
                list = new Dictionary <UIViewType, IUIPair>();
                uiObjects.Add(flow, list);
            }
            return(list);
        }

        void Fire(Trigger next, ViewWithData arg = null)
        {
            Debug.WriteLine("Firing {0} from {1} ({2})", next, uiStateMachine.State, GetHashCode());
            if (triggers.ContainsKey(next))
            {
                uiStateMachine.Fire(triggers[next], arg);
            }
            else
            {
                uiStateMachine.Fire(next);
            }
        }

        UIViewType Go(Trigger trigger)
        {
            return(Go(trigger, activeFlow));
        }

        UIViewType Go(Trigger trigger, UIControllerFlow flow)
        {
            var m = machines[flow];

            Debug.WriteLine("Firing {0} from {1} for flow {2} ({3})", trigger, m.State, flow, GetHashCode());
            m.Fire(trigger);
            return(m.State);
        }

        void Reset()
        {
            if (connectionAdded != null)
            {
                connectionManager.Connections.CollectionChanged -= connectionAdded;
            }
            connectionAdded = null;

            var tr  = transition;
            var cmp = completion;

            transition = null;
            completion = null;
            disposables.Clear();
            tr?.Dispose();
            cmp?.Dispose();
            stopping   = false;
            connection = null;
        }

        bool disposed; // To detect redundant calls
示例#21
0
 public void Dispose()
 {
     _subscriptions.Dispose();
     _subscriptions.Clear();
 }
示例#22
0
 private void OnDisable()
 {
     _cd.Clear();
     _eventIn.Unsubcribe(RaiseEvent);
 }
示例#23
0
 /// <summary>
 /// Views the did disappear.
 /// </summary>
 /// <param name="animated">If set to <c>true</c> animated.</param>
 public override void ViewDidDisappear(bool animated)
 {
     base.ViewDidDisappear(animated);
     subscriptionDisposables.Clear();
     subscriptionDisposables.Dispose();
 }
示例#24
0
 protected override void OnDisappearing()
 {
     base.OnDisappearing();
     disposable.Clear();
 }
示例#25
0
 private void UnsubscribeFromContext()
 {
     _contextSubscriptions.Clear();
 }
示例#26
0
 internal void StopObserving()
 {
     _observingDisposables?.Clear();
 }
示例#27
0
 public virtual void DeInit()
 {
     _subscriptions.Clear();
 }
示例#28
0
 public void Dispose()
 {
     _cd?.Clear();
     GoToCreateUserCommand?.Dispose();
     GoToLoginCommand?.Dispose();
 }
示例#29
0
 void OnDestroy() => disposables.Clear();
示例#30
0
 private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
 {
     compositeDisposable.Clear();
     viewModel.Unsubscribe();
 }
示例#31
0
 public void Dispose()
 {
     disposable.Clear();
     disposable.Dispose();
 }