public SelfSelectorViewModel(PlayerNumber number, OverlayViewModel overlay) { Number = number; SelectCommand = new ReactiveCommand(); SelectCommand .Subscribe(_ => overlay.Ready(number)) .AddTo(DisposeBag); }
public OtherViewModel(PlayerNumber number, OverlayViewModel overlay) : base(number) { IsNextMatchCandidate = overlay.State.InBattle() .Select(it => it.NextMatchCandidates().Contains(number)) .ToReactiveProperty() .AddTo(DisposeBag); IsDefeated = overlay.State.InBattle() .Select(it => it.IsDefeated(number)) .ToReadOnlyReactiveProperty() .AddTo(DisposeBag); IsAlived = IsDefeated .Select(it => !it) .ToReadOnlyReactiveProperty() .AddTo(DisposeBag); BackgroundColor = Observable.CombineLatest(IsNextMatchCandidate, IsDefeated, (a, b) => (isNextMatchCandidate: a, isDefeated: b)) .Select(it => { if (it.isNextMatchCandidate) { return(new SolidColorBrush(Colors.Orange)); } if (it.isDefeated) { return(new SolidColorBrush(Colors.DarkGray)); } return(new SolidColorBrush(Colors.Transparent)); }) .ToReadOnlyReactiveProperty() .AddTo(DisposeBag); MatchedCommand = IsNextMatchCandidate .ToReactiveCommand() .AddTo(DisposeBag); DefeatedCommand = overlay.State.InBattle() .Select(it => it.LastRound.HasValue && !it.IsDefeated(number)) .ToReactiveCommand() .AddTo(DisposeBag); MatchedCommand .Subscribe(_ => overlay.Matched(number)) .AddTo(DisposeBag); DefeatedCommand .Subscribe(_ => overlay.Defeated(number)) .AddTo(DisposeBag); }
public OverlayWindow() { ViewModel = new OverlayViewModel().AddTo(DisposeBag); DataContext = ViewModel; InitializeComponent(); Observable.Merge( ViewModel.SelfSelectors.ObserveRemoveChanged().Select(vm => vm.Number), ViewModel.Players.ObserveRemoveChanged().Select(vm => vm.Number) ) .Subscribe(number => Player(number, g => g.Children.Clear())) .AddTo(DisposeBag); Observable.Merge( ViewModel.SelfSelectors.ObserveResetChanged(), ViewModel.Players.ObserveResetChanged()) .Subscribe(_ => { foreach (var grid in PlayerViewContainers()) { grid.Children.Clear(); } }) .AddTo(DisposeBag); ViewModel.SelfSelectors .ObserveAddChanged() .Subscribe(it => Player(it.Number, g => g.Children.Add(new SelfSelectorView(it)))) .AddTo(DisposeBag); ViewModel.Players .ObserveAddChanged() .OfType <OtherViewModel>() .Subscribe(vm => Player(vm.Number, g => g.Children.Add(new OtherView(vm)))) .AddTo(DisposeBag); ViewModel.Players .ObserveAddChanged() .OfType <SelfViewModel>() .Subscribe(vm => Player(vm.Number, g => g.Children.Add(new SelfView(vm)))) .AddTo(DisposeBag); ViewModel.Initialize(); }