Source code for BiblioPixelAnimations.strip.Searchlights

from bibliopixel.colors import COLORS as _COLORS
from bibliopixel.colors.arithmetic import color_scale
from bibliopixel.animation.strip import Strip

import random


[docs]class Searchlights(Strip): """Three search lights sweeping at different speeds""" COLORS = [_COLORS.MediumSeaGreen, _COLORS.MediumPurple, _COLORS.MediumVioletRed] COLOR_DEFAULTS = ('colors', COLORS), def __init__(self, layout, tail=5, start=0, end=-1, **kwds): super().__init__(layout, start, end, **kwds) self._tail = tail + 1 if self._tail >= self._size // 2: self._tail = (self._size // 2) - 1
[docs] def pre_run(self): self._direction = [1, 1, 1] self._currentpos = [0, 0, 0] self._steps = [1, 1, 1] self._fadeAmt = 256 / self._tail
[docs] def step(self, amt=1): self._ledcolors = [(0, 0, 0) for i in range(self._size)] self.layout.all_off() for i in range(0, 3): self._currentpos[i] = self._start + self._steps[i] color = self.palette(i) # average the colors together so they blend self._ledcolors[self._currentpos[i]] = list(map(lambda x, y: (x + y) // 2, color, self._ledcolors[self._currentpos[i]])) for j in range(1, self._tail): if self._currentpos[i] - j >= 0: self._ledcolors[self._currentpos[i] - j] = list(map(lambda x, y: (x + y) // 2, self._ledcolors[self._currentpos[i] - j], color_scale(color, 255 - (self._fadeAmt * j)))) if self._currentpos[i] + j < self._size: self._ledcolors[self._currentpos[i] + j] = list(map(lambda x, y: (x + y) // 2, self._ledcolors[self._currentpos[i] + j], color_scale(color, 255 - (self._fadeAmt * j)))) if self._start + self._steps[i] >= self._end: self._direction[i] = -1 elif self._start + self._steps[i] <= 0: self._direction[i] = 1 # advance each searchlight at a slightly different speed self._steps[i] += self._direction[i] * amt * int(random.random() > (i * 0.05)) for i, thiscolor in enumerate(self._ledcolors): self.layout.set(i, thiscolor)