Example #1
0
        public override bool Tick(EffectInstance triggeredAction, long ts)
        {
            PixelTarget pixelTarget  = (PixelTarget)triggeredAction.target;
            PixelColor  color        = colors[0];
            PixelColor  reverseColor = (colors.Count == 2) ? colors[1] : PixelColor.Black;

            int numberOfLeds = pixelTarget.leds;
            int msEach       = duration / numberOfLeds;

            triggeredAction.state.TryGetValue(Constants.STEP, out int step);
            triggeredAction.state.TryGetValue(Constants.ONLED, out int onLedNumber);

            bool runAgain = true;

            switch (step)
            {
            case 0:                                      // delay
                triggeredAction.nextUpdate = ts + delay; // This makes a very small delay, we could skip this if there is no delay
                step = 1;
                break;

            case 1:
                pixelTarget.updatePixel(onLedNumber, color, triggeredAction);

                if (onLedNumber++ >= numberOfLeds - 1)
                {
                    if (reverse)
                    {
                        onLedNumber = numberOfLeds - 1;
                        step        = 2;
                    }
                    else
                    {
                        step = 3;
                    }
                }
                triggeredAction.nextUpdate = ts + msEach;
                break;

            case 2:     // reverse
                pixelTarget.updatePixel(onLedNumber, reverseColor, triggeredAction);

                if (onLedNumber-- <= 0)
                {
                    step = 3;
                }
                triggeredAction.nextUpdate = ts + msEach;
                break;

            case 3:
                pixelTarget.updateAllPixels(PixelColor.Black, triggeredAction);
                runAgain = false;
                break;
            }

            triggeredAction.state[Constants.STEP]  = step;
            triggeredAction.state[Constants.ONLED] = onLedNumber;

            return(runAgain);
        }
Example #2
0
        public override bool Tick(EffectInstance triggeredAction, long ts)
        {
            PixelTarget pixelTarget = (PixelTarget)triggeredAction.target;
            PixelColor  color       = colors[0];

            triggeredAction.state.TryGetValue(Constants.STEP, out int step);

            bool runAgain = true;

            switch (step)
            {
            case 0:
                triggeredAction.nextUpdate = ts + delay;      // This makes a very small delay, we could skip this if there is no delay
                break;

            case 1:
                pixelTarget.updateAllPixels(color, triggeredAction);
                triggeredAction.nextUpdate = ts + duration;
                break;

            case 2:
                pixelTarget.updateAllPixels(PixelColor.Black, triggeredAction);
                runAgain = false;
                break;
            }

            triggeredAction.state[Constants.STEP] = step + 1;
            return(runAgain);
        }
Example #3
0
        public override bool Tick(EffectInstance triggeredAction, long ts)
        {
            PixelTarget pixelTarget = (PixelTarget)triggeredAction.target;
            PixelColor  color       = colors[0];

            int numberOfLeds = pixelTarget.leds;
            int msEach       = duration / numberOfLeds;

            triggeredAction.state.TryGetValue(Constants.STEP, out int step);
            triggeredAction.state.TryGetValue(Constants.ONLED, out int onLedNumber);

            bool runAgain = true;

            switch (step)
            {
            case 0:                                      // delay
                triggeredAction.nextUpdate = ts + delay; // This makes a very small delay, we could skip this if there is no delay
                step = 1;
                break;

            case 1:     // first pixel up
                pixelTarget.fadeAllPixels(fade);

                if (onLedNumber < numberOfLeds)
                {
                    pixelTarget.updatePixel(onLedNumber, color, triggeredAction);
                    onLedNumber++;
                }

                if (onLedNumber == numberOfLeds && pixelTarget.lastPixel().isOff())
                {
                    step = 2;
                }
                triggeredAction.nextUpdate = ts + msEach;
                break;

            case 2:
                pixelTarget.updateAllPixels(PixelColor.Black, triggeredAction);
                runAgain = false;
                break;
            }

            triggeredAction.state[Constants.STEP]  = step;
            triggeredAction.state[Constants.ONLED] = onLedNumber;

            return(runAgain);
        }