Ejemplo n.º 1
0
            public void StopExistingTask(ILogicalDevice device, Cue.CueParts cuePart)
            {
                var key = Tuple.Create(device, cuePart);

                Task existingTask;
                if (this.tasks.TryGetValue(key, out existingTask))
                {
                    // Stop existing
                    Executor.Current.StopManagedTask(existingTask);
                }
            }
Ejemplo n.º 2
0
 public CuePart(Cue parent)
 {
     this.parent = parent;
 }
Ejemplo n.º 3
0
            public void AddNewTask(ILogicalDevice device, Cue.CueParts cuePart, Task task, Action mibCheck = null)
            {
                var key = Tuple.Create(device, cuePart);

                this.tasks[key] = task;

                task.ContinueWith(x =>
                    {
                        this.tasks.Remove(key);
                    });

                if (mibCheck != null)
                {
                    task.ContinueWith(x =>
                        {
                            if (!x.IsCanceled)
                                mibCheck();
                        });
                }
            }
Ejemplo n.º 4
0
        private void StopCurrentTask(ILogicalDevice device, Cue.CueParts cuePart)
        {
            if (this.currentInstance == null)
                return;

            this.currentInstance.StopExistingTask(device, cuePart);
        }
Ejemplo n.º 5
0
        private void RunCue(int cueId, Cue cue, bool snap, bool lastCue)
        {
            var watch = Stopwatch.StartNew();

            CancellationTokenSource cancelSource;
            if (this.triggerCancelSources.TryGetValue(cue, out cancelSource))
            {
                cancelSource.Cancel();
            }

            this.currentCueId.OnNext(cueId);

            var cueInstance = new CueInstance();

            if (cue.PartIntensity != null)
            {
                foreach (var device in cue.Devices)
                {
                    var brightnessDevice = device as IReceivesBrightness;
                    if (brightnessDevice == null)
                        continue;

                    var observer = GetControlledObserverBrightness(brightnessDevice);

                    StopCurrentTask(device, Cue.CueParts.Intensity);

                    var fadeTask = Executor.Current.MasterEffect.Fade(
                        observer,
                        brightnessDevice.Brightness,
                        cue.PartIntensity.Destination,
                        snap ? 0 : cue.PartIntensity.FadeMs);

                    cueInstance.AddNewTask(device, Cue.CueParts.Intensity, fadeTask, () => MibCheck(cueId, device));
                }
            }

            if (cue.PartColor != null)
            {
                foreach (var device in cue.Devices)
                {
                    var colorDevice = device as IReceivesColor;
                    if (colorDevice == null)
                        continue;

                    var observer = GetControlledObserverColor(colorDevice);

                    StopCurrentTask(device, Cue.CueParts.Color);

                    var fadeTask = Executor.Current.MasterEffect.Fade(
                        observer,
                        colorDevice.Color,
                        cue.PartColor.Destination,
                        snap ? 0 : cue.PartColor.FadeMs);

                    cueInstance.AddNewTask(device, Cue.CueParts.Color, fadeTask);
                }
            }

            if (cue.PartPan != null)
            {
                foreach (var device in cue.Devices)
                {
                    var panTiltDevice = device as IReceivesPanTilt;
                    if (panTiltDevice == null)
                        continue;

                    var observer = GetControlledObserverPan(panTiltDevice);

                    StopCurrentTask(device, Cue.CueParts.Pan);

                    var fadeTask = Executor.Current.MasterEffect.Fade(
                        observer,
                        panTiltDevice.Pan,
                        cue.PartPan.Destination,
                        snap ? 0 : cue.PartPan.FadeMs);

                    cueInstance.AddNewTask(device, Cue.CueParts.Pan, fadeTask);
                }
            }

            if (cue.PartTilt != null)
            {
                foreach (var device in cue.Devices)
                {
                    var panTiltDevice = device as IReceivesPanTilt;
                    if (panTiltDevice == null)
                        continue;

                    var observer = GetControlledObserverTilt(panTiltDevice);

                    StopCurrentTask(device, Cue.CueParts.Tilt);

                    var fadeTask = Executor.Current.MasterEffect.Fade(
                        observer, panTiltDevice.Tilt,
                        cue.PartTilt.Destination,
                        snap ? 0 : cue.PartTilt.FadeMs);

                    cueInstance.AddNewTask(device, Cue.CueParts.Tilt, fadeTask);
                }
            }

            this.currentInstance = cueInstance;

            var allTasks = cueInstance.GetAllTasks();

            if (allTasks.Length > 0)
            {
                Task.WhenAll(allTasks).ContinueWith(x =>
                {
                    watch.Stop();

                    this.cueCompleted.OnNext(Tuple.Create(cueId, watch.ElapsedMilliseconds));

                    if (!snap && lastCue)
                    {
                        this.currentCueId.OnNext(null);
                        this.currentInstance = null;

                        ReleaseLocks();
                    }
                });
            }
            else
            {
                watch.Stop();

                this.cueCompleted.OnNext(Tuple.Create(cueId, watch.ElapsedMilliseconds));
            }
        }
Ejemplo n.º 6
0
        public CueList AddCue(Cue cue, params ILogicalDevice[] devices)
        {
            cue.Devices.AddRange(devices);

            this.cues.Add(cue);

            return this;
        }
Ejemplo n.º 7
0
        public CueList AddCue(Cue cue)
        {
            this.cues.Add(cue);

            return this;
        }