Skip to content

Commit da74844

Browse files
committed
Fixed reverse mode for Comet / RainbowComet animation.
1 parent 312c042 commit da74844

File tree

1 file changed

+31
-6
lines changed
  • adafruit_led_animation/animation

1 file changed

+31
-6
lines changed

adafruit_led_animation/animation/comet.py

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ def __init__(
6161
tail_length = len(pixel_object) // 4
6262
if bounce and ring:
6363
raise ValueError("Cannot combine bounce and ring mode")
64-
self.reverse = reverse
6564
self.bounce = bounce
65+
self._reverse = reverse
6666
self._initial_reverse = reverse
6767
self._tail_length = tail_length
6868
self._color_step = 0.95 / tail_length
@@ -89,6 +89,33 @@ def _set_color(self, color):
8989
)
9090
self._computed_color = color
9191

92+
@property
93+
def reverse(self):
94+
"""
95+
Whether the animation is reversed
96+
"""
97+
return self._reverse
98+
99+
@reverse.setter
100+
def reverse(self, value):
101+
self._reverse = value
102+
self._direction = -1 if self._reverse else 1
103+
104+
@property
105+
def ring(self):
106+
"""
107+
Ring mode.
108+
"""
109+
return self._ring
110+
111+
@ring.setter
112+
def ring(self, value):
113+
if self.bounce and value:
114+
raise ValueError("Cannot combine bounce and ring mode")
115+
self._ring = value
116+
self._left_side = 0 if value else -self._tail_length
117+
self.reset()
118+
92119
def draw(self):
93120
colors = self._comet_colors
94121
if self.reverse:
@@ -104,22 +131,20 @@ def draw(self):
104131

105132
self._tail_start += self._direction
106133

107-
if self._tail_start < self._left_side or self._tail_start >= self._right_side:
134+
if self._tail_start < self._left_side or (self._tail_start >= self._right_side and not self._reverse):
108135
if self.bounce:
109136
self.reverse = not self.reverse
110-
self._direction = -self._direction
111137
elif self._ring:
112138
self._tail_start = self._tail_start % self._num_pixels
113139
else:
114140
self.reset()
115-
if self.reverse == self._initial_reverse and self.draw_count > 0:
116-
self.cycle_complete = True
141+
142+
self.cycle_complete = True
117143

118144
def reset(self):
119145
"""
120146
Resets to the first state.
121147
"""
122-
self.reverse = self._initial_reverse
123148
if self.reverse:
124149
self._tail_start = self._num_pixels + self._tail_length + 1
125150
else:

0 commit comments

Comments
 (0)