Example #1
0
        static Subject <Unit> CreateObserver(InitialSettings s)
        {
            var subject = new Subject <Unit>();

            s.Width.Merge(s.Height)
            .Select(_ => Unit.Default)
            .Subscribe(subject);
            s.PopulationRatio
            .Select(_ => Unit.Default)
            .Subscribe(subject);

            return(subject);
        }
Example #2
0
        public AppModel()
        {
            _CurrentInfection       = InitializeInfection(InitialSettings.ToValue());
            InfectionSnapshot.Value = _CurrentInfection;

            CreateObserver(InitialSettings)
            .Throttle(TimeSpan.FromSeconds(0.1))
            .Subscribe(_ =>
            {
                _CurrentInfection       = InitializeInfection(InitialSettings.ToValue());
                InfectionSnapshot.Value = _CurrentInfection;
            });

            IsRunning
            .Where(b => b)
            .ObserveOn(TaskPoolScheduler.Default)
            .Subscribe(_ => Simulate());
        }
Example #3
0
        void Simulate()
        {
            var subscription = Observable.Interval(SnapshotInterval)
                               .Subscribe(_ => InfectionSnapshot.Value = _CurrentInfection);

            if (_CurrentInfection.Turn > 0)
            {
                _CurrentInfection = InitializeInfection(InitialSettings.ToValue());
            }

            while (IsRunning.Value)
            {
                var rs = RealtimeSettings.ToValue();
                Thread.Sleep(TimeSpan.FromSeconds(rs.ExecutionInterval));
                _CurrentInfection = NextInfection(_CurrentInfection, rs);
            }

            subscription.Dispose();
        }