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();
            }
        }
Beispiel #2
0
        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;
            }
        }