Merge pull request #78 from plugowski/master
Fixed reverse mode for Comet / RainbowComet animation.
This commit is contained in:
commit
76d419afc6
1 changed files with 33 additions and 6 deletions
|
|
@ -61,8 +61,8 @@ class Comet(Animation):
|
||||||
tail_length = len(pixel_object) // 4
|
tail_length = len(pixel_object) // 4
|
||||||
if bounce and ring:
|
if bounce and ring:
|
||||||
raise ValueError("Cannot combine bounce and ring mode")
|
raise ValueError("Cannot combine bounce and ring mode")
|
||||||
self.reverse = reverse
|
|
||||||
self.bounce = bounce
|
self.bounce = bounce
|
||||||
|
self._reverse = reverse
|
||||||
self._initial_reverse = reverse
|
self._initial_reverse = reverse
|
||||||
self._tail_length = tail_length
|
self._tail_length = tail_length
|
||||||
self._color_step = 0.95 / tail_length
|
self._color_step = 0.95 / tail_length
|
||||||
|
|
@ -89,6 +89,33 @@ class Comet(Animation):
|
||||||
)
|
)
|
||||||
self._computed_color = color
|
self._computed_color = color
|
||||||
|
|
||||||
|
@property
|
||||||
|
def reverse(self):
|
||||||
|
"""
|
||||||
|
Whether the animation is reversed
|
||||||
|
"""
|
||||||
|
return self._reverse
|
||||||
|
|
||||||
|
@reverse.setter
|
||||||
|
def reverse(self, value):
|
||||||
|
self._reverse = value
|
||||||
|
self._direction = -1 if self._reverse else 1
|
||||||
|
|
||||||
|
@property
|
||||||
|
def ring(self):
|
||||||
|
"""
|
||||||
|
Ring mode.
|
||||||
|
"""
|
||||||
|
return self._ring
|
||||||
|
|
||||||
|
@ring.setter
|
||||||
|
def ring(self, value):
|
||||||
|
if self.bounce and value:
|
||||||
|
raise ValueError("Cannot combine bounce and ring mode")
|
||||||
|
self._ring = value
|
||||||
|
self._left_side = 0 if value else -self._tail_length
|
||||||
|
self.reset()
|
||||||
|
|
||||||
def draw(self):
|
def draw(self):
|
||||||
colors = self._comet_colors
|
colors = self._comet_colors
|
||||||
if self.reverse:
|
if self.reverse:
|
||||||
|
|
@ -104,22 +131,22 @@ class Comet(Animation):
|
||||||
|
|
||||||
self._tail_start += self._direction
|
self._tail_start += self._direction
|
||||||
|
|
||||||
if self._tail_start < self._left_side or self._tail_start >= self._right_side:
|
if self._tail_start < self._left_side or (
|
||||||
|
self._tail_start >= self._right_side and not self._reverse
|
||||||
|
):
|
||||||
if self.bounce:
|
if self.bounce:
|
||||||
self.reverse = not self.reverse
|
self.reverse = not self.reverse
|
||||||
self._direction = -self._direction
|
|
||||||
elif self._ring:
|
elif self._ring:
|
||||||
self._tail_start = self._tail_start % self._num_pixels
|
self._tail_start = self._tail_start % self._num_pixels
|
||||||
else:
|
else:
|
||||||
self.reset()
|
self.reset()
|
||||||
if self.reverse == self._initial_reverse and self.draw_count > 0:
|
|
||||||
self.cycle_complete = True
|
self.cycle_complete = True
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
"""
|
"""
|
||||||
Resets to the first state.
|
Resets to the first state.
|
||||||
"""
|
"""
|
||||||
self.reverse = self._initial_reverse
|
|
||||||
if self.reverse:
|
if self.reverse:
|
||||||
self._tail_start = self._num_pixels + self._tail_length + 1
|
self._tail_start = self._num_pixels + self._tail_length + 1
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue