Skip to content

Commit

Permalink
Update Raindrops effect to respect LED range limits
Browse files Browse the repository at this point in the history
Improved effect to update LED index within `led_min` and `led_max` limits
  • Loading branch information
filterpaper committed Oct 27, 2024
1 parent d316331 commit 3e264f3
Showing 1 changed file with 22 additions and 14 deletions.
36 changes: 22 additions & 14 deletions quantum/rgb_matrix/animations/raindrops_anim.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@
RGB_MATRIX_EFFECT(RAINDROPS)
# ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS

static void raindrops_set_color(int i, effect_params_t* params) {
if (!HAS_ANY_FLAGS(g_led_config.flags[i], params->flags)) return;
static rgb_t raindrops_set_color(effect_params_t* params) {
hsv_t hsv = {0, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v};

// Take the shortest path between hues
Expand All @@ -14,23 +13,32 @@ static void raindrops_set_color(int i, effect_params_t* params) {
deltaH += 256;
}

hsv.h = rgb_matrix_config.hsv.h + (deltaH * (random8() & 0x03));
rgb_t rgb = rgb_matrix_hsv_to_rgb(hsv);
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
hsv.h = rgb_matrix_config.hsv.h + (deltaH * (random8() & 0x03));
return rgb_matrix_hsv_to_rgb(hsv);
}

bool RAINDROPS(effect_params_t* params) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
if (!params->init) {
// Change one LED every tick, make sure speed is not 0
if (scale16by8(g_rgb_timer, qadd8(rgb_matrix_config.speed, 16)) % 10 == 0) {
raindrops_set_color(random8_max(RGB_MATRIX_LED_COUNT), params);
}
} else {
for (int i = led_min; i < led_max; i++) {
raindrops_set_color(i, params);
static uint16_t index = 0;
static rgb_t rgb = {};

if (params->init) {
for (uint8_t i = led_min; i < led_max; i++) {
RGB_MATRIX_TEST_LED_FLAGS();
rgb = raindrops_set_color(params);
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
}
}

// Change one LED every tick, make sure speed is not 0
if (scale16by8(g_rgb_timer, qadd8(rgb_matrix_config.speed, 16)) % 10 == 0) {
index = random8_max(RGB_MATRIX_LED_COUNT);
rgb = raindrops_set_color(params);
}

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)) {
rgb_matrix_set_color(index, rgb.r, rgb.g, rgb.b);
}
return rgb_matrix_check_finished_leds(led_max);
}

Expand Down

0 comments on commit 3e264f3

Please sign in to comment.