Skip to content

Commit 76d419a

Browse files
authored
Merge pull request #78 from plugowski/master
Fixed reverse mode for Comet / RainbowComet animation.
2 parents e95ce18 + 78417f1 commit 76d419a

File tree

1 file changed

+33
-6
lines changed
  • adafruit_led_animation/animation

1 file changed

+33
-6
lines changed

adafruit_led_animation/animation/comet.py

Lines changed: 33 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,22 @@ 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 (
135+
self._tail_start >= self._right_side and not self._reverse
136+
):
108137
if self.bounce:
109138
self.reverse = not self.reverse
110-
self._direction = -self._direction
111139
elif self._ring:
112140
self._tail_start = self._tail_start % self._num_pixels
113141
else:
114142
self.reset()
115-
if self.reverse == self._initial_reverse and self.draw_count > 0:
116-
self.cycle_complete = True
143+
144+
self.cycle_complete = True
117145

118146
def reset(self):
119147
"""
120148
Resets to the first state.
121149
"""
122-
self.reverse = self._initial_reverse
123150
if self.reverse:
124151
self._tail_start = self._num_pixels + self._tail_length + 1
125152
else:

0 commit comments

Comments
 (0)