From eecc5dc20577f240a1c426dcccf3f2ab4675799c Mon Sep 17 00:00:00 2001 From: "Valeriano A.R" Date: Thu, 28 Aug 2014 01:58:24 +0200 Subject: [PATCH] =?UTF-8?q?GameLib=5FEntityCustomCheckCollision:=20Funci?= =?UTF-8?q?=C3=B3n=20para=20hacer=20pruebas=20de=20colisiones=20de=20una?= =?UTF-8?q?=20entidad=20con=20vector=20velocidad=20diferente?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GameLib/Entity.c | 8 ++++---- GameLib/GameLib.c | 35 +++++++++++++++++++++++++++++++++++ GameLib/GameLib.h | 7 +++++++ 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/GameLib/Entity.c b/GameLib/Entity.c index 5633091..a875d46 100644 --- a/GameLib/Entity.c +++ b/GameLib/Entity.c @@ -644,10 +644,6 @@ void Entity_CollisionResponseLine( vec2 pos2,vel2,velFric,intersection; float dist,fric_static,fric_dynamic,fricLen; - // Calculate friction - fric_static=(ent->fric_static+ent2->fric_static)/2; - fric_dynamic=(ent->fric_dynamic+ent2->fric_dynamic)/2; - // Calculate end position vec2_scale(vel2,ent->vel,1.0f-t); dist=-vec2_dot(norm,vel2); @@ -658,6 +654,10 @@ void Entity_CollisionResponseLine( vec2_scaleadd(intersection,ent->pos,ent->vel,t); if(applyFriction){ + // Calculate friction + fric_static=(ent->fric_static+ent2->fric_static)/2; + fric_dynamic=(ent->fric_dynamic+ent2->fric_dynamic)/2; + // Apply friction vec2_minus(velFric,pos2,intersection); fricLen=sqrtf(vec2_dot(velFric,velFric)); diff --git a/GameLib/GameLib.c b/GameLib/GameLib.c index 90712b8..501e5ea 100644 --- a/GameLib/GameLib.c +++ b/GameLib/GameLib.c @@ -529,6 +529,41 @@ Entity GameLib_SearchEnt(int (*func)(Entity ent,void *d),void *d){ } +///////////////////////////// +// GameLib_EntityCustomCheckCollision +// +// +int GameLib_EntityCustomCheckCollision(Entity ent,vec2 vel){ + int collision=0; + CollisionInfo collInfo=NULL; + vec2 originalVel; + int j; + + vec2_copy(originalVel,ent->vel); + vec2_copy(ent->vel,vel); + Entity_CalcBBox(ent); + + for(j=0;j<_n_entities;j++){ + if(!(_entity[j]->flags&EntityFlag_Collision) || + !Entity_BBoxIntersect(ent,_entity[j])) + { + continue; + } + Entity_CheckCollision(ent,_entity[j],&collInfo); + if(collInfo!=NULL){ + collision=1; + break; + } + } + + vec2_copy(ent->vel,originalVel); + Entity_CalcBBox(ent); + + CollisionInfo_Destroy(&collInfo); + return collision; +} + + ///////////////////////////// // GameLib_PlaySound // diff --git a/GameLib/GameLib.h b/GameLib/GameLib.h index 0b9f2eb..9d92f44 100644 --- a/GameLib/GameLib.h +++ b/GameLib/GameLib.h @@ -94,6 +94,13 @@ void GameLib_ForEachEnt(int (*func)(Entity ent)); Entity GameLib_SearchEnt(int (*func)(Entity ent,void *d),void *d); +///////////////////////////// +// GameLib_EntityCustomCheckCollision +// +// +int GameLib_EntityCustomCheckCollision(Entity ent,vec2 vel); + + ///////////////////////////// // GameLib_PlaySound //