2 #ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
3 #if !defined(DISABLE_RGB_MATRIX_SOLID_SPLASH) || !defined(DISABLE_RGB_MATRIX_SOLID_MULTISPLASH)
5 extern const rgb_led g_rgb_leds
[DRIVER_LED_TOTAL
];
6 extern rgb_config_t rgb_matrix_config
;
7 extern last_hit_t g_last_hit_tracker
;
9 static bool rgb_matrix_solid_multisplash_range(uint8_t start
, effect_params_t
* params
) {
10 RGB_MATRIX_USE_LIMITS(led_min
, led_max
);
12 HSV hsv
= { rgb_matrix_config
.hue
, rgb_matrix_config
.sat
, 0 };
13 uint8_t count
= g_last_hit_tracker
.count
;
14 for (uint8_t i
= led_min
; i
< led_max
; i
++) {
16 point_t point
= g_rgb_leds
[i
].point
;
17 for (uint8_t j
= start
; j
< count
; j
++) {
18 int16_t dx
= point
.x
- g_last_hit_tracker
.x
[j
];
19 int16_t dy
= point
.y
- g_last_hit_tracker
.y
[j
];
20 uint8_t dist
= sqrt16(dx
* dx
+ dy
* dy
);
21 uint16_t effect
= scale16by8(g_last_hit_tracker
.tick
[j
], rgb_matrix_config
.speed
) - dist
;
24 hsv
.v
= qadd8(hsv
.v
, 255 - effect
);
26 hsv
.v
= scale8(hsv
.v
, rgb_matrix_config
.val
);
27 RGB rgb
= hsv_to_rgb(hsv
);
28 rgb_matrix_set_color(i
, rgb
.r
, rgb
.g
, rgb
.b
);
30 return led_max
< DRIVER_LED_TOTAL
;
33 bool rgb_matrix_solid_multisplash(effect_params_t
* params
) {
34 return rgb_matrix_solid_multisplash_range(0, params
);
37 bool rgb_matrix_solid_splash(effect_params_t
* params
) {
38 return rgb_matrix_solid_multisplash_range(qsub8(g_last_hit_tracker
.count
, 1), params
);
41 #endif // !defined(DISABLE_RGB_MATRIX_SPLASH) && !defined(DISABLE_RGB_MATRIX_MULTISPLASH)
42 #endif // RGB_MATRIX_KEYREACTIVE_ENABLED