Skip to content

Commit c73ed48

Browse files
committed
effect bugfixes for width>255
* band-aid for ripple, matrix, crazy bee * arc mapping fix for diameter > 255 * small speedup for "block" mapping
1 parent 2022558 commit c73ed48

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

wled00/FX.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2589,7 +2589,7 @@ uint16_t ripple_base()
25892589
} else {//randomly create new wave
25902590
if (random16(IBN + 10000) <= (SEGMENT.intensity >> (SEGMENT.is2D()*3))) {
25912591
ripples[i].state = 1;
2592-
ripples[i].pos = SEGMENT.is2D() ? ((random8(SEGENV.virtualWidth())<<8) | (random8(SEGENV.virtualHeight()))) : random16(SEGLEN);
2592+
ripples[i].pos = SEGMENT.is2D() ? ((random16(SEGENV.virtualWidth())<<8) | (random16(SEGENV.virtualHeight()))) : random16(SEGLEN);
25932593
ripples[i].color = random8(); //color
25942594
}
25952595
}
@@ -5803,7 +5803,7 @@ uint16_t mode_2Dmatrix(void) { // Matrix2D. By Jeremy Williams.
58035803

58045804
// spawn new falling code
58055805
if (random8() <= SEGMENT.intensity || emptyScreen) {
5806-
uint8_t spawnX = random8(cols);
5806+
uint16_t spawnX = random16(cols);
58075807
SEGMENT.setPixelColorXY(spawnX, 0, spawnColor);
58085808
// update hint for next run
58095809
SEGENV.aux0 = spawnX;
@@ -6276,8 +6276,8 @@ uint16_t mode_2Dcrazybees(void) {
62766276
void aimed(uint_fast16_t w, uint_fast16_t h) {
62776277
if (!true) //WLEDMM SuperSync
62786278
random16_set_seed(strip.now);
6279-
aimX = random8(0, w);
6280-
aimY = random8(0, h);
6279+
aimX = random8(0, min(UINT8_MAX, int(w)));
6280+
aimY = random8(0, min(UINT8_MAX, int(h)));
62816281
hue = random8();
62826282
deltaX = abs(aimX - posX);
62836283
deltaY = abs(aimY - posY);
@@ -6296,8 +6296,8 @@ uint16_t mode_2Dcrazybees(void) {
62966296
SEGMENT.setUpLeds();
62976297
SEGMENT.fill(BLACK);
62986298
for (size_t i = 0; i < n; i++) {
6299-
bee[i].posX = random8(0, cols);
6300-
bee[i].posY = random8(0, rows);
6299+
bee[i].posX = random8(0, min(UINT8_MAX, int(cols)));
6300+
bee[i].posY = random8(0, min(UINT8_MAX, int(rows)));
63016301
bee[i].aimed(cols, rows);
63026302
}
63036303
}

wled00/FX_fcn.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -873,8 +873,11 @@ uint16_t Segment::calc_virtualLength() const {
873873
vLen = max(vW,vH); // get the longest dimension
874874
break;
875875
case M12_pArc:
876-
vLen = sqrt16(vW * vW + vH * vH);
877-
if (vW != vH) vLen++; // round up
876+
{ unsigned vLen2 = vW * vW + vH * vH; // length ^2
877+
if (vLen2 < UINT16_MAX) vLen = sqrt16(vLen2); // use faster function for 16bit values
878+
else vLen = sqrtf(vLen2); // fall-back to float if bigger
879+
if (vW != vH) vLen++; // round up
880+
}
878881
break;
879882
case M12_jMap: //WLEDMM jMap
880883
if (jMap)
@@ -888,7 +891,7 @@ uint16_t Segment::calc_virtualLength() const {
888891
if (nrOfVStrips()>1)
889892
vLen = max(vW,vH) * 4;//0.5; // get the longest dimension
890893
else
891-
vLen = max(vW,vH) * 0.5; // get the longest dimension
894+
vLen = max(vW,vH) * 0.5f; // get the longest dimension
892895
break;
893896
case M12_sPinwheel:
894897
vLen = getPinwheelLength(vW, vH);
@@ -906,23 +909,23 @@ uint16_t Segment::calc_virtualLength() const {
906909
//WLEDMM used for M12_sBlock
907910
static void xyFromBlock(uint16_t &x,uint16_t &y, uint16_t i, uint16_t vW, uint16_t vH, uint16_t vStrip) {
908911
float i2;
909-
if (i<=SEGLEN*0.25) { //top, left to right
910-
i2 = i/(SEGLEN*0.25);
912+
if (i<=SEGLEN*0.25f) { //top, left to right
913+
i2 = i/(SEGLEN*0.25f);
911914
x = vW / 2 - vStrip - 1 + i2 * vStrip * 2;
912915
y = vH / 2 - vStrip - 1;
913916
}
914-
else if (i <= SEGLEN * 0.5) { //right, top to bottom
915-
i2 = (i-SEGLEN*0.25)/(SEGLEN*0.25);
917+
else if (i <= SEGLEN * 0.5f) { //right, top to bottom
918+
i2 = (i-SEGLEN*0.25f)/(SEGLEN*0.25f);
916919
x = vW / 2 + vStrip;
917920
y = vH / 2 - vStrip - 1 + i2 * vStrip * 2;
918921
}
919922
else if (i <= SEGLEN * 0.75) { //bottom, right to left
920-
i2 = (i-SEGLEN*0.5)/(SEGLEN*0.25);
923+
i2 = (i-SEGLEN*0.5f)/(SEGLEN*0.25f);
921924
x = vW / 2 + vStrip - i2 * vStrip * 2;
922925
y = vH / 2 + vStrip;
923926
}
924927
else if (i <= SEGLEN) { //left, bottom to top
925-
i2 = (i-SEGLEN*0.75)/(SEGLEN*0.25);
928+
i2 = (i-SEGLEN*0.75f)/(SEGLEN*0.25f);
926929
x = vW / 2 - vStrip - 1;
927930
y = vH / 2 + vStrip - i2 * vStrip * 2;
928931
}

0 commit comments

Comments
 (0)