Skip to content

Commit

Permalink
Update Pixel Rain to respect LED range limits
Browse files Browse the repository at this point in the history
Improved effect with update to LED index within `led_min` and `led_max` limits
  • Loading branch information
filterpaper committed Oct 27, 2024
1 parent d316331 commit 132b01a
Showing 1 changed file with 9 additions and 14 deletions.
23 changes: 9 additions & 14 deletions quantum/rgb_matrix/animations/pixel_rain_anim.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,20 @@ RGB_MATRIX_EFFECT(PIXEL_RAIN)
# ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS

static bool PIXEL_RAIN(effect_params_t* params) {
static uint32_t wait_timer = 0;
static fast_timer_t timer = 0;
static uint16_t index = RGB_MATRIX_LED_COUNT + 1;

inline uint32_t interval(void) {
return 500 / scale16by8(qadd8(rgb_matrix_config.speed, 16), 16);
if ((params->iter == 0) && (timer_elapsed_fast(timer) > (320 - rgb_matrix_config.speed))) {
index = random8_max(RGB_MATRIX_LED_COUNT);
timer = timer_read_fast();
}

inline void rain_pixel(uint8_t led_index) {
if (!HAS_ANY_FLAGS(g_led_config.flags[led_index], params->flags)) {
return;
}
RGB_MATRIX_USE_LIMITS(led_min, led_max);
if (led_min <= index && index < led_max && HAS_ANY_FLAGS(g_led_config.flags[index], params->flags)) {
hsv_t hsv = (random8() & 2) ? (hsv_t){0, 0, 0} : (hsv_t){random8(), random8_min_max(127, 255), rgb_matrix_config.hsv.v};
rgb_t rgb = rgb_matrix_hsv_to_rgb(hsv);
rgb_matrix_set_color(led_index, rgb.r, rgb.g, rgb.b);
wait_timer = g_rgb_timer + interval();
}

RGB_MATRIX_USE_LIMITS(led_min, led_max);
if (g_rgb_timer > wait_timer) {
rain_pixel(random8_max(RGB_MATRIX_LED_COUNT));
rgb_matrix_set_color(index, rgb.r, rgb.g, rgb.b);
index = RGB_MATRIX_LED_COUNT + 1;
}
return rgb_matrix_check_finished_leds(led_max);
}
Expand Down

0 comments on commit 132b01a

Please sign in to comment.