diff --git a/src/collision.c b/src/collision.c index 7886957..a5c32b1 100644 --- a/src/collision.c +++ b/src/collision.c @@ -7,42 +7,41 @@ void checkCollision(){ for(int u=0; u<=MAX_ENTITIES-1; u++){ Entity *en1 = &entities[u]; - for(int j=1; j<=MAX_ENTITIES-1; j++){ + if(!en1->active){ + continue; + } + for(int j=u+1; j<=MAX_ENTITIES-1; j++){ if(u!=j){ Entity *en2 = &entities[j]; - if (fabsf(en1->position.x - en2->position.x) < (en1->size * 0.5f + en2->size * 0.5f)) + if(!en2->active){ + continue; + } + if (fabsf(en1->position.x - en2->position.x) < (en1->size * 0.5f + en2->size * 0.5f) && fabsf(en1->position.y - en2->position.y) < (en1->size * 0.5f + en2->size * 0.5f)) { + + float forcex=fabs(((en1->mass+en2->mass)/2)*((((en1->velocity.x)+(scale*1.5))+((en2->velocity.x)+(scale*1.5)))/2)+((en1->force.x+en2->force.x)/2))*(scale); + float forcey=fabs(((en1->mass+en2->mass)/2)*((((en1->velocity.y)+(scale*1.5))+((en2->velocity.y)+(scale*1.5)))/2))*(scale); if(en1->position.x < en2->position.x){ ApplyForce( en1, - (Vector2){-10000, 0} + (Vector2){-forcex, -forcey} ); ApplyForce( en2, - (Vector2){10000, 0} + (Vector2){forcex, forcey} ); } else{ ApplyForce( en1, - (Vector2){10000, 0} + (Vector2){forcex, -forcey} ); ApplyForce( en2, - (Vector2){-10000, 0} + (Vector2){-forcex, forcey} ); } } - // if(fabsf(en1->position.y - en2->position.y) < (en1->size * 0.5f + en2->size * 0.5f)){ - // ApplyForce( - // en1, - // (Vector2){0, 10000} - // ); - // ApplyForce( - // en2, - // (Vector2){0, -10000} - // ); - // } } } } diff --git a/src/world.h b/src/world.h index 5df9310..4cd9163 100644 --- a/src/world.h +++ b/src/world.h @@ -12,6 +12,8 @@ extern bool isSimulating; extern float simTime; +extern const float scale; + extern const float MAX_PLAYER_SPEED; extern const float PLAYER_SPEED_FACTOR; diff --git a/wrldboxMacOS b/wrldboxMacOS index 44a6425..39673c4 100755 Binary files a/wrldboxMacOS and b/wrldboxMacOS differ