1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
float Dist = 0;
Dist = sqrtf ( ( player.position.x-other_player.position.x) * (player.position.x-other_player.position.x) +
( player.position.y-other_player.position.y) * (player.position.y-other_player.position.y) +
( player.position.z-other_player.position.z) * (player.position.z-other_player.position.z)
);
bCollisionPlayers = ( Dist < 8.0f );
if ( bCollisionPlayers ) {
Vector3 vCollisionNormal,vRelativeVelocity;
float j;
vCollisionNormal = player.position - other_player.position;
vCollisionNormal.Normalize();
vRelativeVelocity = player.velocity - other_player.velocity;
float coef = -(1+COEFFICIENTOFRESTITUTION);
j = ( -(1 + COEFFICIENTOFRESTITUTION ) * (vRelativeVelocity.DotProduct(vCollisionNormal) ) ) /
( ( vCollisionNormal.DotProduct(vCollisionNormal) ) *
( 4 ) ); // 1/0.5f + 1/0.5f on considere que la masse est 500 grammes
player.velocity += (vCollisionNormal*j)/0.5f;
player.position+=vCollisionNormal*(8.0f-Dist);
other_player.velocity-= (vCollisionNormal*j)/0.5f;
} |
Partager