optional ball trails (rolling balls)
This commit is contained in:
parent
5110a8c636
commit
58187e00e6
@ -2858,8 +2858,10 @@ static uint16_t rolling_balls(void) {
|
|||||||
// number of balls based on intensity setting to max of 16 (cycles colors)
|
// number of balls based on intensity setting to max of 16 (cycles colors)
|
||||||
// non-chosen color is a random color
|
// non-chosen color is a random color
|
||||||
uint8_t numBalls = SEGMENT.intensity/16 + 1;
|
uint8_t numBalls = SEGMENT.intensity/16 + 1;
|
||||||
|
bool hasCol2 = SEGCOLOR(2);
|
||||||
|
|
||||||
if (SEGENV.call == 0) {
|
if (SEGENV.call == 0) {
|
||||||
|
SEGMENT.fill(hasCol2 ? BLACK : SEGCOLOR(1)); // start clean
|
||||||
for (int i = 0; i < maxNumBalls; i++) {
|
for (int i = 0; i < maxNumBalls; i++) {
|
||||||
balls[i].lastBounceUpdate = strip.now;
|
balls[i].lastBounceUpdate = strip.now;
|
||||||
balls[i].velocity = 20.0f * float(random16(1000, 10000))/10000.0f; // number from 1 to 10
|
balls[i].velocity = 20.0f * float(random16(1000, 10000))/10000.0f; // number from 1 to 10
|
||||||
@ -2871,14 +2873,16 @@ static uint16_t rolling_balls(void) {
|
|||||||
|
|
||||||
float cfac = float(scale8(8, 255-SEGMENT.speed) +1)*20000.0f; // this uses the Aircoookie conversion factor for scaling time using speed slider
|
float cfac = float(scale8(8, 255-SEGMENT.speed) +1)*20000.0f; // this uses the Aircoookie conversion factor for scaling time using speed slider
|
||||||
|
|
||||||
bool hasCol2 = SEGCOLOR(2);
|
if (SEGMENT.check3) SEGMENT.fade_out(250); // 2-8 pixel trails (optional)
|
||||||
if (!SEGMENT.check2) SEGMENT.fill(hasCol2 ? BLACK : SEGCOLOR(1));
|
else {
|
||||||
|
if (!SEGMENT.check2) SEGMENT.fill(hasCol2 ? BLACK : SEGCOLOR(1)); // don't fill with background color if user wants to see trails
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < numBalls; i++) {
|
for (int i = 0; i < numBalls; i++) {
|
||||||
float timeSinceLastUpdate = float((strip.now - balls[i].lastBounceUpdate))/cfac;
|
float timeSinceLastUpdate = float((strip.now - balls[i].lastBounceUpdate))/cfac;
|
||||||
float thisHeight = balls[i].height + balls[i].velocity * timeSinceLastUpdate; // this method keeps higher resolution
|
float thisHeight = balls[i].height + balls[i].velocity * timeSinceLastUpdate; // this method keeps higher resolution
|
||||||
// test if intensity level was increased and some balls are way off the track then put them back
|
// test if intensity level was increased and some balls are way off the track then put them back
|
||||||
if (thisHeight < -0.5f || thisHeight > 1.5f){
|
if (thisHeight < -0.5f || thisHeight > 1.5f) {
|
||||||
thisHeight = balls[i].height = (float(random16(0, 10000)) / 10000.0f); // from 0. to 1.
|
thisHeight = balls[i].height = (float(random16(0, 10000)) / 10000.0f); // from 0. to 1.
|
||||||
balls[i].lastBounceUpdate = strip.now;
|
balls[i].lastBounceUpdate = strip.now;
|
||||||
}
|
}
|
||||||
@ -2928,7 +2932,7 @@ static uint16_t rolling_balls(void) {
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_ROLLINGBALLS[] PROGMEM = "Rolling Balls@!,# of balls,,,,Collisions,Overlay;!,!,!;!;1;m12=1"; //bar
|
static const char _data_FX_MODE_ROLLINGBALLS[] PROGMEM = "Rolling Balls@!,# of balls,,,,Collisions,Overlay,Trails;!,!,!;!;1;m12=1"; //bar
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user