void runPhysics()//Yes, really { int newtime=SDL_GetTicks(); float deltaT=newtime-milliseconds; milliseconds=newtime; int i; Sprite curopt; int curfloor=optnum*80; for(i=0;i<optnum;i++) { //Calculate gravity curopt=options[i]; curopt.dy+=deltaT/10; //calculate delta v float dv=(curopt.dy*deltaT)/200; //Collision detection if(curopt.collides) { //Check for collision with other objects if(dv>0&&i>0&&curopt.y+dv+80>options[i-1].y) { curopt=collisionResponse(curopt,options[i-1].y-80); dv=(curopt.dy*deltaT)/200; } else if(i==0&&curopt.y+dv>curfloor)//Check for collision with floor { curopt=collisionResponse(curopt,curfloor); dv=(curopt.dy*deltaT)/200; } //else if (dv<0&&i<optnum-1&&curopt.y+dv<options[i+1].y+80) //{ //curopt=collisionResponse(curopt,options[i-1].y+80); //} } //Apply velocity if(curopt.y<640) { curopt.y+=dv; } options[i]=curopt; } }
void PhysicsObject::collisionResponse(const PhysicsObject &object) { collisionResponse(&object); }