Source code for BiblioPixelAnimations.strip.Pulse

from bibliopixel.colors import COLORS
from bibliopixel.colors.arithmetic import color_scale
from bibliopixel.animation.strip import Strip
import random


[docs]class Pulse(Strip): COLOR_DEFAULTS = ('colors', [COLORS.Red]) def __init__(self, layout, tail=2, chance=30, min_speed=1, max_speed=5, **kwds): super().__init__(layout, **kwds) self._tail = tail + 1 # makes tail math later easier if self._tail >= self._size // 2: self._tail = (self._size // 2) - 1 if self._tail == 0: self._tail = 1 self._fadeAmt = 256 // self._tail self.chance = chance self.min_speed = min_speed self.max_speed = max_speed
[docs] def pre_run(self): self.pulse_color = None self.pulse_position = 0 self.pulse_speed = 0
[docs] def add_pulse(self): self.pulse_color = random.choice(self.palette) self.pulse_speed = random.randrange(self.min_speed, self.max_speed) self.pulse_position = 0
[docs] def step(self, amt=1): self.layout.all_off() if self.pulse_speed == 0 and random.randrange(0, 100) <= self.chance: self.add_pulse() if self.pulse_speed > 0: self.layout.set(self.pulse_position, self.pulse_color) for i in range(self._tail): c = color_scale(self.pulse_color, 255 - (self._fadeAmt * i)) self.layout.set(self.pulse_position - i, c) self.layout.set(self.pulse_position + i, c) if self.pulse_position > self._size + self._tail: self.pulse_speed = 0 else: self.pulse_position += self.pulse_speed