Exemple #1
0
    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);
}