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); }
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); }
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); }