diff --git a/achterbahn.ino b/achterbahn.ino index 6badfe2..60e2315 100644 --- a/achterbahn.ino +++ b/achterbahn.ino @@ -241,7 +241,18 @@ void spawnWagon(){ // pos, wagonlength, startvel , startacc, trainmass, wagoncolor //Wagon tmpr = Wagon(maxid++,NUMPIXELS,&strip, height, random(0, 20), _randomlength, random(map(_randomlength,3,40,1,1), map(_randomlength,3,40, 13,40))/10.0 , 0 , 5 , Wheel((uint8_t)random(0,255))); //spawn new wagon - Wagon tmpr = Wagon(maxid++,NUMPIXELS,&strip, height, NUMPIXELS+_randomlength, _randomlength, -random(map(_randomlength,3,40,10,20), map(_randomlength,3,40, 22,60))/10.0 , 0 , 2.0 , Wheel((uint8_t)random(0,255))); //spawn new wagon + int side_startpos=0; + int side_multi=1; + + if (random(0,2)==0){ //spawn from other side + side_startpos=NUMPIXELS+_randomlength; + side_multi=-1; + } + + Wagon tmpr = Wagon(maxid++,NUMPIXELS,&strip, height, side_startpos, _randomlength, side_multi*random(map(_randomlength,3,20,5,10), map(_randomlength,3,20, 5,40))/10.0 , 0 , 5.0 , Wheel((uint8_t)random(0,255))); //spawn new wagon + + + //special spawns if (random(0,50)==0){ @@ -473,6 +484,7 @@ void loop_achterbahn(){ { it = wagon_arr.erase(it); // After erasing, it is now pointing the next element. --it; + Serial.println("Killed train"); #ifdef RESPAWNWAGON spawnWagon(); //spawn new one #endif diff --git a/wagon.cpp b/wagon.cpp index 66f935a..5e8e7e5 100644 --- a/wagon.cpp +++ b/wagon.cpp @@ -2,7 +2,8 @@ #define WAGONLENGTH 3 -#define EDGE_WALL +#define EDGE_KILL +//#define EDGE_WALL //#define EDGE_BOUNCE //#define EDGE_WRAP #define WRAPLEDPOS _numpixels //standard @@ -176,6 +177,11 @@ void Wagon::updatePhysics(float updatedelayms) #ifdef EDGE_WALL //nothing #endif + #ifdef EDGE_KILL + if (_pos>=WRAPLEDPOS+(_trainlength*WAGONLENGTH)){ + _health=0; + } + #endif } if (_pos<0){ #ifdef EDGE_WRAP @@ -187,6 +193,9 @@ void Wagon::updatePhysics(float updatedelayms) #ifdef EDGE_WALL //nothing #endif + #ifdef EDGE_KILL + _health=0; + #endif } //fade out if health got low @@ -206,6 +215,9 @@ float Wagon::getHeight(int p){ #ifdef EDGE_WALL return _height[0]+p*-100.0; //edges as wall #endif + #ifdef EDGE_KILL + return _height[0]+p*-100.0; //same like edges as wall + #endif }else if(p>=_numpixels){ #ifdef EDGE_WRAP p=p-_numpixels; //wrap edge @@ -213,6 +225,9 @@ float Wagon::getHeight(int p){ #ifdef EDGE_WALL return _height[_numpixels-1]+(p-_numpixels)*100.0; //edges as wall #endif + #ifdef EDGE_KILL + return _height[_numpixels-1]+(p-_numpixels)*100.0; //samel like edges as wall + #endif } return _height[p]; }