void BaseGame :: update(vector<ofVec2f> hits) { timeSinceStateChange+=ofGetLastFrameTime(); timeSinceLastShot = 0; if(previousShots.size()>0) { timeSinceLastShot = ofGetElapsedTimef() - previousShotTimes[previousShotTimes.size()-1]; } for(int i = 0; i<hits.size(); i++) { registerHit(hits[i]); } if((state == STATE_COUNTDOWN) && (timeSinceStateChange>3)) { changeState(STATE_PLAYING); } if(state == STATE_PLAYING) { if(shotsRemaining<=0) { shotsRemaining = 0; if(timeSinceLastShot>1) changeState(STATE_GAMEOVER); } } }
void ContactListener::BeginContact(b2Contact* contact) { registerHit(contact->GetFixtureA(), contact->GetFixtureB(), contact); registerHit(contact->GetFixtureB(), contact->GetFixtureA(), contact); }
uchar Check4Drum(void) { static uchar timePerDrumCheck=50; long currTime=ES_Timer_GetTime(); static uchar state =0; //0 is noiseDataCollection, 1 is Drumming static int numPts=0; static uchar lastRevState; static uchar currRevState; static uint drum[2]; static uint hits[2]; static int i; static uchar recording=0; static uchar hitInc=0; if(! (currTime-lastDrumTime > timePerDrumCheck || currTime<lastDrumTime) ) return 0; //exit immediately if not enough time has passed drum[LEFT]=(int) ADS12_ReadADPin(drumLPin); drum[RIGHT]=(int) ADS12_ReadADPin(drumRPin); if(state==0) { if(!recording) { if(numPts>=NUM_IN_A_ROW) { recording=1; numPts=0; bg[0]=0; bg[1]=0; } if(absDiff(drum[LEFT],bg[LEFT]) > 10 || absDiff(drum[RIGHT],bg[RIGHT]) > 10 || bg[LEFT]<300 || bg[RIGHT] < 300) { printf("discard %i %i\r\n",bg[LEFT],bg[RIGHT]); bg[LEFT]=drum[LEFT]; bg[RIGHT]=drum[RIGHT]; } else { numPts++; //uncommented below } } if(recording) //recording { bg[0]+=drum[0]; bg[1]+=drum[1]; bgSaves[numPts]=drum[LEFT]; //11 to 30 ->0 to 19 bgSaves[numPts+NUM_SAMPLES]=drum[RIGHT]; //11 to 30 -> 20 -> 39 printf("pts: %lu, %lu\r\n", bg[0], bg[1]); numPts++; } //numPts++; //------------CalcBGNoise---------------------- if(numPts>=NUM_SAMPLES)//actually 20 points here because we ignore first 10 (see above) (2.5 seconds total because thsi is 20Hz function) { bg[LEFT]/=numPts; //calculate background noise bg[RIGHT]/=numPts; printf("bg is: %lu, %lu\r\n",bg[LEFT],bg[RIGHT]); state=1; timePerDrumCheck=5; hits[LEFT]=0; hits[RIGHT]=0; lastRevState=revDown(); bgDone=1; } } //-----------CalcBGNoiseComplete-------------- //-------ReadAnalogDrumHit------------- else if(state==1) { currRevState=revDown(); for(i=0;i<2;i++) //Check if we have any good analog readings { if(currRevState!=lastRevState) { currHit[i]=0; //change direction, immediately set currHit to 0 so it wont trigger. } //if(absDiff(drum[i],bg[i]) > NOISE_THRESHOLD) //noise thresholding if(absDiff(drum[i],600) > NOISE_THRESHOLD) //noise thresholding HARDCODE { //printf("%i-%i\r\n",i,drum[i]); if(!hitInc) { hitInc=1; classifyStartTime=currTime; //starting classification } hits[i]++; } } //-------ReadAnalogDrumHitComplete----- //----Classify hit--- if( ((currTime>classifyStartTime + CLASSIFY_TIME)||classifyStartTime>currTime) && hitInc) //timer expired { hitInc=0; //end classify period if(hits[0]>=MIN_HITS_PER_CLASSIFY || hits[1] >= MIN_HITS_PER_CLASSIFY) { //begin classifying printf("class ify %i,%i",hits[LEFT],hits[RIGHT]); if(hits[LEFT] > hits[RIGHT]) //if there are more lefts than rights, good we know what this is. { registerHit(LEFT,currTime); if(hits[RIGHT] > hits[LEFT]/2) //probably hit both at once { registerHit(RIGHT,currTime); } } else { registerHit(RIGHT,currTime); if(hits[LEFT] > hits[RIGHT]/2) //probably hit both at once { registerHit(LEFT,currTime); } } } hits[LEFT]=0; hits[RIGHT]=0; } //----Classify Hit END--- } lastRevState=currRevState; lastDrumTime=currTime; return 0; }