feat(patterns): reverse animation direction via preset n8
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -18,7 +18,7 @@ class ColourCycle:
|
||||
pos -= 170
|
||||
return (0, pos * 3, 255 - pos * 3)
|
||||
|
||||
def _render_gradient(self, colors, phase, brightness):
|
||||
def _render_gradient(self, preset, colors, phase, brightness):
|
||||
num_leds = self.driver.num_leds
|
||||
color_count = len(colors)
|
||||
if num_leds <= 0 or color_count <= 0:
|
||||
@@ -40,14 +40,16 @@ class ColourCycle:
|
||||
c1[1] + ((c2[1] - c1[1]) * frac) // 256,
|
||||
c1[2] + ((c2[2] - c1[2]) * frac) // 256,
|
||||
)
|
||||
self.driver.n[i] = self.driver.apply_brightness(blended, brightness)
|
||||
self.driver.n[self.driver.led_i(preset, i)] = self.driver.apply_brightness(
|
||||
blended, brightness
|
||||
)
|
||||
self.driver.n.write()
|
||||
|
||||
def _render_rainbow(self, phase, brightness):
|
||||
def _render_rainbow(self, preset, phase, brightness):
|
||||
num_leds = self.driver.num_leds
|
||||
for i in range(num_leds):
|
||||
rc_index = (i * 256 // max(1, num_leds)) + phase
|
||||
self.driver.n[i] = self.driver.apply_brightness(
|
||||
self.driver.n[self.driver.led_i(preset, i)] = self.driver.apply_brightness(
|
||||
self._wheel(rc_index & 255), brightness
|
||||
)
|
||||
self.driver.n.write()
|
||||
@@ -64,8 +66,8 @@ class ColourCycle:
|
||||
|
||||
if mode == 1:
|
||||
if not preset.a:
|
||||
self._render_rainbow(phase, preset.b)
|
||||
self.driver.step = (phase + step_amount) % 256
|
||||
self._render_rainbow(preset, phase, preset.b)
|
||||
self.driver.step = (phase + self.driver.signed(preset, step_amount)) % 256
|
||||
yield
|
||||
return
|
||||
last_update = utime.ticks_ms()
|
||||
@@ -73,16 +75,16 @@ class ColourCycle:
|
||||
delay_ms = max(1, int(preset.d))
|
||||
now = utime.ticks_ms()
|
||||
if utime.ticks_diff(now, last_update) >= delay_ms:
|
||||
self._render_rainbow(phase, preset.b)
|
||||
phase = (phase + step_amount) % 256
|
||||
self._render_rainbow(preset, phase, preset.b)
|
||||
phase = (phase + self.driver.signed(preset, step_amount)) % 256
|
||||
self.driver.step = phase
|
||||
last_update = utime.ticks_add(last_update, delay_ms)
|
||||
yield
|
||||
|
||||
colors = preset.c if preset.c else [(255, 0, 0), (0, 0, 255)]
|
||||
if not preset.a:
|
||||
self._render_gradient(colors, phase, preset.b)
|
||||
self.driver.step = (phase + step_amount) % 256
|
||||
self._render_gradient(preset, colors, phase, preset.b)
|
||||
self.driver.step = (phase + self.driver.signed(preset, step_amount)) % 256
|
||||
yield
|
||||
return
|
||||
|
||||
@@ -91,8 +93,8 @@ class ColourCycle:
|
||||
delay_ms = max(1, int(preset.d))
|
||||
now = utime.ticks_ms()
|
||||
if utime.ticks_diff(now, last_update) >= delay_ms:
|
||||
self._render_gradient(colors, phase, preset.b)
|
||||
phase = (phase + step_amount) % 256
|
||||
self._render_gradient(preset, colors, phase, preset.b)
|
||||
phase = (phase + self.driver.signed(preset, step_amount)) % 256
|
||||
self.driver.step = phase
|
||||
last_update = utime.ticks_add(last_update, delay_ms)
|
||||
yield
|
||||
|
||||
Reference in New Issue
Block a user