From a20358b61bf0c38356438c87e5c59663524e038e Mon Sep 17 00:00:00 2001 From: pjhatch <66844564+pjhatch@users.noreply.github.com> Date: Sun, 12 Jul 2020 08:33:48 -0500 Subject: [PATCH] Adding 2 ball track modes With and without collisions --- wled00/FX.cpp | 31 +++++++++++++++++++------------ wled00/FX.h | 12 ++++++++---- wled00/wled00.ino | 1 + 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 1ecd3ecc..ce03f70e 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -2528,13 +2528,6 @@ typedef struct Ball { float impactVelocity; float height; } ball; -// modified for balltrack mode -typedef struct Ballt { - unsigned long lastBounceUpdate; - float mass; // could fix this to be = 1. if memory is an issue - float velocity; - float height; -} ballt; /* * Bouncing Balls Effect */ @@ -2594,7 +2587,15 @@ uint16_t WS2812FX::mode_bouncing_balls(void) { /* * bouncing balls on a track track Effect modified from Air Cookie's bouncing balls */ -uint16_t WS2812FX::mode_balltrack(void) { +// modified for balltrack mode +typedef struct Ballt { + unsigned long lastBounceUpdate; + float mass; // could fix this to be = 1. if memory is an issue + float velocity; + float height; +} ballt; + +uint16_t WS2812FX::ball_track(bool collide) { //allocate segment data uint16_t maxNumBalls = 16; uint16_t dataSize = sizeof(ballt) * maxNumBalls; @@ -2641,8 +2642,7 @@ uint16_t WS2812FX::mode_balltrack(void) { balls[i].height=thisHeight; } // check for collisions - bool docol=true; - if(docol){ + if(collide){ for(uint8_t j= i+1; j < numBalls; j++){ if(balls[j].velocity != balls[i].velocity) { // tcollided + balls[j].lastBounceUpdate is acutal time of collision (this keeps precision with long to float conversions) @@ -2650,14 +2650,14 @@ uint16_t WS2812FX::mode_balltrack(void) { balls[i].velocity*float(balls[j].lastBounceUpdate-balls[i].lastBounceUpdate))/ (balls[j].velocity-balls[i].velocity); - if( (tcollided>2)&&(tcollided2)&&(tcollided