public static void ObserveInputs(this DigitalLogic logic, IScheduler scheduler, IDictionary <Guid, IDisposable> disposables) { var added = logic.Inputs.ObserveAddedValues().ObserveOn(scheduler).Subscribe(input => { var dispose = input.FromPropertyChange("State").ObserveOn(scheduler).Subscribe(sender => logic.Calculate()); disposables.Add(input.Id, dispose); logic.Calculate(); }); disposables.Add(Guid.NewGuid(), added); var removed = logic.Inputs.ObserveRemovedValues().ObserveOn(scheduler).Subscribe(input => { var id = input.Id; disposables[id].Dispose(); disposables.Remove(id); logic.Calculate(); }); disposables.Add(Guid.NewGuid(), removed); if (logic.Inputs.Count > 0) { foreach (var input in logic.Inputs) { var dispose = input.FromPropertyChange("State").ObserveOn(scheduler).Subscribe(sender => logic.Calculate()); disposables.Add(input.Id, dispose); } logic.Calculate(); } }
private static void MovelElement(double dX, double dY, DigitalLogic element) { element.X += dX; element.Y += dY; foreach (var pin in element.Pins) { pin.X += dX; pin.Y += dY; } }