public DiscController(ITowerUserControl towerUserControl) { _towerUserControl = towerUserControl ?? throw new ArgumentNullException(nameof(towerUserControl)); GameEngine.Instance.DiscAdded .Merge(GameEngine.Instance.DiscRemoved) .Where(x => x.Tower == _towerUserControl.Id) .Subscribe(x => DrawTower(x.Tower)) .DisposeWith(Subscriptions); }
public TowerDragAndDropController(ITowerUserControl towerUserControl) { if (towerUserControl == null) { throw new ArgumentNullException(nameof(towerUserControl)); } var dragEnterObservable = Observable.FromEventPattern <DragEventHandler, DragEventArgs>( h => towerUserControl.DragEnter += h, h => towerUserControl.DragEnter -= h); dragEnterObservable .Select(x => x.EventArgs) .Subscribe(e => { var disc = (DiscPanel)e.Data.GetData(typeof(DiscPanel)); var lastPanel = towerUserControl.DiscController.GetLastDiscFromDiscParent(disc); e.Effect = Equals(towerUserControl, disc.Parent) || !Equals(lastPanel, disc) ? DragDropEffects.None : DragDropEffects.Copy; }) .DisposeWith(Subscriptions); var dragDropObservable = Observable.FromEventPattern <DragEventHandler, DragEventArgs>( h => towerUserControl.DragDrop += h, h => towerUserControl.DragDrop -= h); dragDropObservable .Select(x => x.EventArgs) .Subscribe(e => { var disc = (DiscPanel)e.Data.GetData(typeof(DiscPanel)); var lastPanel = towerUserControl.DiscController.GetLastDiscFromDiscParent(disc); if (Equals(lastPanel, disc)) { var fromTower = (ITowerUserControl)disc.Parent; GameEngine.Instance.MoveDisc(fromTower.Id, towerUserControl.Id); } }) .DisposeWith(Subscriptions); }