|
From: julien r. <jul...@us...> - 2004-11-30 18:22:09
|
Update of /cvsroot/epfl/tgengine-0.1 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23531 Modified Files: Makefile.Linux defs.h dlinkednode.h glrenderer.cc md5mesh10.h physiccallback.h physicengine.cc physicengine.h physicnode.cc physicnode.h scenemanager.cc scenemanager.h Log Message: cf Changelog@wiki Index: physicengine.cc =================================================================== RCS file: /cvsroot/epfl/tgengine-0.1/physicengine.cc,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** physicengine.cc 23 Nov 2004 12:36:26 -0000 1.32 --- physicengine.cc 30 Nov 2004 18:21:56 -0000 1.33 *************** *** 20,27 **** void PhysicEngine::StepSlideMove(PhysicNode* n, float eTime, Vector3& vVelocity, Vector3 origin) { - //BspCollisionResult trace; CollisionResult trace; int bumpcount = 0; - //Vector3 origin = n->pBBox->vWorldOrigin; Plane pPlanes[5]; int iNumPlanes = 0; --- 20,25 ---- *************** *** 36,43 **** //a chaque fois qu'on rencontre un plan, on relance un trace avec comme origine le Endpoint sur le plan précédent et on ajuste la vitesse de notre objet. MAXBUMPS permet simplement d'éviter des boucles infinies { - //trace = pLevel->CheckRayMove(origin, origin+vVelocity*time_left, n->GetBBox()->vMin, n->GetBBox()->vMax); trace = Trace(origin, origin+vVelocity*time_left, n->GetBBox()->vMin, n->GetBBox()->vMax, n); - //on trace avec une sphere, les mouvements semblent plus 'lisses' - //trace = pLevel->CheckRayMove(origin+n->GetBBox()->vBSCenter, origin+n->GetBBox()->vBSCenter+vVelocity*time_left, TRACE_SPHERE, n->GetBBox()->fBSRadius); if (trace.AllSolid) --- 34,38 ---- *************** *** 179,185 **** //si on met le allsolid, ca foire les mouvements sur les y if (col.Fraction < 1.0f || col.AllSolid) ! n->SetOnGround(true); else ! n->SetOnGround(false); } --- 174,182 ---- //si on met le allsolid, ca foire les mouvements sur les y if (col.Fraction < 1.0f || col.AllSolid) ! //n->SetOnGround(true); ! n->SetPhysicType(PHYS_WALKING); else ! //n->SetOnGround(false); ! n->SetPhysicType(PHYS_FALLING); } *************** *** 189,194 **** * Code inspiré de celui de Quake 2 (fichier qcommon/pmove.c) */ - //ugly hackpour que le bOnGround ne bug pas sur les monstres - //-> on différenci la taille du joueur et des autres objets pour être sur le sol void PhysicEngine::Move (float eTime) --- 186,189 ---- *************** *** 199,211 **** n = pNodes[i]; //si l'objet ne doit pas etre géré par la physique, on continue ! if (!n->Clip()) { - //ugly hack pour éviter de tomber quand on tappe -clip le jeu étant deja lancé (on se choppe l'accel négative de la frame précédente en fait... - Vector3 veloc = n->GetVelocity(); - veloc.y = 0; - n->SetVelocity(veloc); - n->SetPosition(n->GetPosition()+n->GetVelocity()*eTime); - //n->SetRotation(n->GetRotation()+n->GetRotationVelocity()*eTime); Quaternion q = n->GetRotationVelocity()*eTime; q.Normalize(); --- 194,200 ---- n = pNodes[i]; //si l'objet ne doit pas etre géré par la physique, on continue ! if (n->GetPhysicType() == PHYS_NONE) { n->SetPosition(n->GetPosition()+n->GetVelocity()*eTime); Quaternion q = n->GetRotationVelocity()*eTime; q.Normalize(); *************** *** 218,253 **** //on a un objet qui doit subir les forces et les collisions ! /* ! if (n->GetGravityFactor() > EPSILON) //on évite de s'amuser si l'objet se fout de la gravité { Vector3 vVelocity = n->GetVelocity(); ! if (!n->OnGround()) vVelocity.y = -(*pGravity)*n->GetGravityFactor(); else if (vVelocity.y < 0) //si l'objet touche le sol, il faut ramener la gravité à zéro, sinon, l'objet va se retrouver avec une gravité négative très grande (ça l'empeche de sauter notamment) vVelocity.y = 0; - //std::cout << "OnGround : " << n->OnGround(); - //std::cout << "Accel : \t" << n->GetAccel() << std::endl; - //int red[]={1,0,0}; - //Engine::pEngine->pRenderer->drawDebugArrow(n->vPosition, n->vPosition+n->vAccel*5, red); - //std::cout << n->GetVelocity() << std::endl; n->SetVelocity(vVelocity); ! }*/ //mise a jour des volumes englobants n->CalculateBoundingVolume(); //on test les collisions avec le monde - if (pLevel) { ! //appel de la callback pour les collisions avec la map. Ca permet aux objets style rockets de savoir s'ils doivent exploser ! CollisionResult trace = Trace(n->GetPosition(), n->GetPosition()+n->GetVelocity()*eTime, n->GetBBox()->vMin, n->GetBBox()->vMax, n); ! if ((trace.Fraction < 1.0f || trace.AllSolid) && n->GetPhysicCallBack() != NULL) ! n->GetPhysicCallBack()->Collide(trace.pNode, trace.EndPoint, trace.Normal); ! ! if (n==NULL) //il est possible que l'appel a la callback entraine la suppression de l'objet (la rocket explose), on doit donc verifier que le pointeur soit toujours valide avant de continuer ! continue; _TryToStep(n, eTime); - Quaternion q = n->GetRotationVelocity()*eTime; q.Normalize(); --- 207,229 ---- //on a un objet qui doit subir les forces et les collisions ! ! if (n->GetPhysicType() != PHYS_PROJECTILE) //on évite de s'amuser si l'objet se fout de la gravité { Vector3 vVelocity = n->GetVelocity(); ! if (n->GetPhysicType() == PHYS_FALLING) vVelocity.y = -(*pGravity)*n->GetGravityFactor(); else if (vVelocity.y < 0) //si l'objet touche le sol, il faut ramener la gravité à zéro, sinon, l'objet va se retrouver avec une gravité négative très grande (ça l'empeche de sauter notamment) vVelocity.y = 0; n->SetVelocity(vVelocity); ! } //mise a jour des volumes englobants n->CalculateBoundingVolume(); //on test les collisions avec le monde if (pLevel) { ! _TryToStep(n, eTime); Quaternion q = n->GetRotationVelocity()*eTime; q.Normalize(); *************** *** 257,260 **** --- 233,241 ---- } + //appel de la callback pour les collisions avec la map. Ca permet aux objets style rockets de savoir s'ils doivent exploser + CollisionResult trace = Trace(n->GetPosition(), n->GetPosition()+n->GetVelocity()*eTime, n->GetBBox()->vMin, n->GetBBox()->vMax, n); + if ((trace.Fraction < 1.0f || trace.AllSolid) && n->GetPhysicCallBack() != NULL) + n->GetPhysicCallBack()->HitWall(trace.EndPoint, trace.Normal, n); + } } Index: scenemanager.cc =================================================================== RCS file: /cvsroot/epfl/tgengine-0.1/scenemanager.cc,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** scenemanager.cc 19 Nov 2004 12:04:04 -0000 1.20 --- scenemanager.cc 30 Nov 2004 18:21:56 -0000 1.21 *************** *** 61,120 **** pCamera->Update (frameInterval); pCamera->Look (); - - glPushMatrix(); - - Quaternion q = pCamera->GetRotation(); - Vector3 fwd, rgt, up; - fwd = q.GetXAxis(); - rgt = q.GetZAxis(); - up = q.GetYAxis(); - - fwd *= 10; - rgt *= 10; - up *= 10; - //glTranslatef(-13,-10,-20); - glDisable (GL_TEXTURE_2D); - glBegin (GL_LINES); - glColor3f (1,0,0); - glVertex3f (0,0,0); - glVertex3fv (&fwd.x); - - glColor3f(0,0,1); - glVertex3f (0,0,0); - glVertex3fv (&rgt.x); - - glColor3f(0,1,0); - glVertex3f (0,0,0); - glVertex3fv (&up.x); - glEnd (); - glPopMatrix (); - //Engine::pRenderer->RenderBBox(pCamera->pBBox); } - //FIXME: il faudrait passer par le renderer if(pLevel) ! { ! pLevel->SetCamera(pCamera); ! pLevel->Render(); ! ! ! /*Vector3 vTarget = pCamera->GetRotation().GetZAxis(); ! Vector3 vPosition = pCamera->GetPosition(); ! vTarget = vPosition - vTarget*10000; ! ! CollisionResult myResult = pPhysicEngine->Trace(vPosition, vTarget); ! glPointSize(5.0f); ! ! Engine::pRenderer->Begin2D(); ! Engine::pRenderer->End2D(); ! ! glColor3f(1,0,0); ! glPushMatrix(); ! glTranslatef(myResult.EndPoint.x, myResult.EndPoint.y, myResult.EndPoint.z); ! GLUquadric* pquad = gluNewQuadric(); ! gluSphere( pquad, 10,10,10); ! glPopMatrix();*/ ! } - Mesh* m = pFirstObject; if (m != NULL) --- 61,68 ---- pCamera->Update (frameInterval); pCamera->Look (); } if(pLevel) ! pLevel->Render(); Mesh* m = pFirstObject; if (m != NULL) *************** *** 279,394 **** void SceneManager::AddWorldObject (Mesh* obj) { ! if (pFirstObject) //le premier noeud existe ! { ! pCurrentObject->SetNext(obj); ! obj->SetPrev(pCurrentObject); ! obj->SetNext(NULL); ! pCurrentObject = obj; ! } ! else ! { ! obj->SetPrev(NULL); ! obj->SetNext(NULL); ! pFirstObject = obj; ! pCurrentObject = obj; ! } } void SceneManager::AddParticlesEmitter (ParticleEmitter* p) { ! if (pFirstEmitter) //le premier noeud existe ! { ! pCurrentEmitter->SetNext(p); ! p->SetPrev(pCurrentEmitter); ! p->SetNext(NULL); ! pCurrentEmitter = p; ! } ! else ! { ! p->SetPrev(NULL); ! p->SetNext(NULL); ! pFirstEmitter = p; ! pCurrentEmitter = p; ! } } void SceneManager::AddPointLight (PointLight* pL) { ! if (pFirstPointLight) //le premier noeud existe ! { ! pCurrentPointLight->SetNext(pL); ! pL->SetPrev(pCurrentPointLight); ! pL->SetNext(NULL); ! pCurrentPointLight = pL; ! } ! else ! { ! pL->SetPrev(NULL); ! pL->SetNext(NULL); ! pFirstPointLight = pL; ! pCurrentPointLight = pL; ! } } void SceneManager::RemoveParticlesEmitter(ParticleEmitter* p) { ! if (p->GetNext() == NULL) //l'objet est le dernier de la liste ! { ! if (p->GetPrev() != NULL) //mais il a un predecesseur ! { ! pCurrentEmitter = p->GetPrev(); ! pCurrentEmitter->SetNext(NULL); ! } ! //sinon, il est seul dans la liste ! else ! { ! pFirstEmitter = NULL; ! pCurrentEmitter = NULL; ! } ! } ! else //il n'est pas le dernier ! { ! if (p->GetPrev() != NULL) //il a un predecesseur ! { ! p->GetPrev()->SetNext(p->GetNext()); ! p->GetNext()->SetPrev(p->GetPrev()); ! } ! else //il est le premier de la liste ! { ! pFirstEmitter = p->GetNext(); ! pFirstEmitter->SetPrev(NULL); ! } ! } } void SceneManager::RemovePointLight (PointLight* p) { ! if (p->GetNext() == NULL) //l'objet est le dernier de la liste ! { ! if (p->GetPrev() != NULL) //mais il a un predecesseur ! { ! pCurrentPointLight = p->GetPrev(); ! pCurrentPointLight->SetNext(NULL); ! } ! //sinon, il est seul dans la liste, donc on change juste pCurrentObject ! else ! { ! pFirstPointLight = NULL; ! pCurrentPointLight = NULL; ! } ! } ! else //il n'est pas le dernier ! { ! if (p->GetPrev() != NULL) //il a un predecesseur ! { ! p->GetPrev()->SetNext(p->GetNext()); ! p->GetNext()->SetPrev(p->GetPrev()); ! } ! else //il est le premier de la liste ! { ! pFirstPointLight = p->GetNext(); ! pFirstPointLight->SetPrev(NULL); ! } ! } } --- 227,256 ---- void SceneManager::AddWorldObject (Mesh* obj) { ! _TG_ADD_DLINKEDNODE(obj, pCurrentObject, pFirstObject) } void SceneManager::AddParticlesEmitter (ParticleEmitter* p) { ! _TG_ADD_DLINKEDNODE(p, pCurrentEmitter, pFirstEmitter) } void SceneManager::AddPointLight (PointLight* pL) { ! _TG_ADD_DLINKEDNODE(pL, pCurrentPointLight, pFirstPointLight); } void SceneManager::RemoveParticlesEmitter(ParticleEmitter* p) { ! _TG_REMOVE_DLINKEDNODE(p,pCurrentEmitter,pFirstEmitter) } void SceneManager::RemovePointLight (PointLight* p) { ! _TG_REMOVE_DLINKEDNODE(p,pCurrentPointLight,pFirstPointLight) ! } ! ! void SceneManager::RemoveWorldObject(Mesh* obj) ! { ! _TG_REMOVE_DLINKEDNODE(obj,pCurrentObject,pFirstObject); } *************** *** 400,435 **** } - - void SceneManager::RemoveWorldObject(Mesh* obj) - { - if (obj->GetNext() == NULL) //l'objet est le dernier de la liste - { - if (obj->GetPrev() != NULL) //mais il a un predecesseur - { - pCurrentObject = obj->GetPrev(); - pCurrentObject->SetNext(NULL); - } - //sinon, il est seul dans la liste, donc on change juste pCurrentObject - else - { - pFirstObject = NULL; - pCurrentObject = NULL; - } - } - else //il n'est pas le dernier - { - if (obj->GetPrev() != NULL) //il a un predecesseur - { - obj->GetPrev()->SetNext(obj->GetNext()); - obj->GetNext()->SetPrev(obj->GetPrev()); - } - else //il est le premier de la liste - { - pFirstObject = obj->GetNext(); - pFirstObject->SetPrev(NULL); - } - } - } - void SceneManager::AddTimedWorldObject (Mesh* obj, float time) { --- 262,265 ---- Index: defs.h =================================================================== RCS file: /cvsroot/epfl/tgengine-0.1/defs.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** defs.h 17 Nov 2004 23:12:37 -0000 1.7 --- defs.h 30 Nov 2004 18:21:55 -0000 1.8 *************** *** 13,16 **** --- 13,18 ---- #include <iomanip> + #include "tg_stl/vector.h" + #ifdef TGWIN32 #include <SDL/SDL.h> Index: physicnode.cc =================================================================== RCS file: /cvsroot/epfl/tgengine-0.1/physicnode.cc,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** physicnode.cc 19 Nov 2004 12:04:04 -0000 1.11 --- physicnode.cc 30 Nov 2004 18:21:56 -0000 1.12 *************** *** 3,11 **** namespace tg { ! PhysicNode::PhysicNode(SceneNode* n) { pBBox=n->GetBBox(); - bClip=true; - bOnGround = false; vNodes.clear(); vNodes.push_back(n); --- 3,9 ---- namespace tg { ! PhysicNode::PhysicNode(SceneNode* n, int physType) { pBBox=n->GetBBox(); vNodes.clear(); vNodes.push_back(n); *************** *** 15,18 **** --- 13,17 ---- vAccel.Null(); fGravityFactor = 1.0f; + iPhysicType = physType; //vEuler.Null(); Index: physicengine.h =================================================================== RCS file: /cvsroot/epfl/tgengine-0.1/physicengine.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** physicengine.h 22 Nov 2004 21:19:07 -0000 1.10 --- physicengine.h 30 Nov 2004 18:21:56 -0000 1.11 *************** *** 7,10 **** --- 7,11 ---- #include "dlinkednode.h" #include "physicnode.h" + #include "physicdefs.h" namespace tg Index: scenemanager.h =================================================================== RCS file: /cvsroot/epfl/tgengine-0.1/scenemanager.h,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** scenemanager.h 17 Nov 2004 23:12:39 -0000 1.9 --- scenemanager.h 30 Nov 2004 18:21:56 -0000 1.10 *************** *** 62,66 **** DecalManager* GetDecalManager () { return pDecalManager; } - //void SetLevel(D3Map* d) { pD3Level = d; } inline CollisionResult Trace (Vector3 Begin, Vector3 End) { return pPhysicEngine->Trace(Begin, End); } --- 62,65 ---- *************** *** 75,79 **** std::vector<DebugSphere*> pDebugSpheres; ! Mesh* pFirstObject; Mesh* pCurrentObject; --- 74,78 ---- std::vector<DebugSphere*> pDebugSpheres; ! Mesh* pFirstObject; Mesh* pCurrentObject; Index: md5mesh10.h =================================================================== RCS file: /cvsroot/epfl/tgengine-0.1/md5mesh10.h,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** md5mesh10.h 22 Nov 2004 21:19:07 -0000 1.9 --- md5mesh10.h 30 Nov 2004 18:21:55 -0000 1.10 *************** *** 19,22 **** --- 19,23 ---- class MD5Mesh10 : public Base { + protected: struct _MD5Joint; struct _MD5Mesh; Index: dlinkednode.h =================================================================== RCS file: /cvsroot/epfl/tgengine-0.1/dlinkednode.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** dlinkednode.h 17 Nov 2004 23:12:37 -0000 1.3 --- dlinkednode.h 30 Nov 2004 18:21:55 -0000 1.4 *************** *** 14,38 **** #define _TG_INIT_DLINKEDNODE(arg1, arg2) next = arg1; prev = arg2; ! /* ! namespace tg ! { ! namespace scene ! { ! class DLinkedNode ! { ! public: ! DLinkedNode () { next = NULL; prev=NULL; } ! inline DLinkedNode* GetNext () const { return next; } ! inline DLinkedNode* GetPrev () const { return prev; } ! inline void SetNext(DLinkedNode* d) { next = d; } ! inline void SetPrev(DLinkedNode* d) { prev = d; } ! protected: ! DLinkedNode* next; ! DLinkedNode* prev; ! }; ! } ! }*/ #endif --- 14,62 ---- #define _TG_INIT_DLINKEDNODE(arg1, arg2) next = arg1; prev = arg2; ! #define _TG_REMOVE_DLINKEDNODE(p, current, first) \ ! if (p->GetNext() == NULL)\ ! { \ ! if (p->GetPrev() != NULL) \ ! { \ ! current = p->GetPrev(); \ ! current->SetNext(NULL); \ ! } \ ! else \ ! { \ ! first = NULL; \ ! current = NULL; \ ! } \ ! } \ ! else \ ! { \ ! if (p->GetPrev() != NULL) \ ! { \ ! p->GetPrev()->SetNext(p->GetNext()); \ ! p->GetNext()->SetPrev(p->GetPrev()); \ ! } \ ! else \ ! { \ ! first = p->GetNext(); \ ! first->SetPrev(NULL); \ ! } \ ! } ! #define _TG_ADD_DLINKEDNODE(p, current, first) \ ! if (first) \ ! { \ ! current->SetNext(p); \ ! p->SetPrev(current); \ ! p->SetNext(NULL); \ ! current = p; \ ! } \ ! else \ ! { \ ! p->SetPrev(NULL); \ ! p->SetNext(NULL); \ ! first = p; \ ! current = p; \ ! } ! #endif Index: glrenderer.cc =================================================================== RCS file: /cvsroot/epfl/tgengine-0.1/glrenderer.cc,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** glrenderer.cc 22 Nov 2004 21:19:07 -0000 1.24 --- glrenderer.cc 30 Nov 2004 18:21:55 -0000 1.25 *************** *** 1240,1243 **** --- 1240,1244 ---- glEnable (GL_TEXTURE_2D); glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_VERTEX_ARRAY); glEnable(GL_CULL_FACE); *************** *** 1261,1265 **** glVertexPointer(3, GL_FLOAT, sizeof(Vertice) , &pVerts[0].vPosition); glTexCoordPointer(2, GL_FLOAT, sizeof(Vertice), &pVerts[0].s); - glEnableClientState(GL_VERTEX_ARRAY); glDrawElements(GL_TRIANGLES, mesh->GetTrianglesCount(j)*3, GL_UNSIGNED_INT, pIndexes); --- 1262,1265 ---- *************** *** 1285,1288 **** --- 1285,1289 ---- //desactivation de la texture de couleur glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_VERTEX_ARRAY); glDisable (GL_TEXTURE_2D); Index: Makefile.Linux =================================================================== RCS file: /cvsroot/epfl/tgengine-0.1/Makefile.Linux,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Makefile.Linux 17 Nov 2004 23:12:37 -0000 1.7 --- Makefile.Linux 30 Nov 2004 18:21:49 -0000 1.8 *************** *** 5,9 **** OBJSRC = $(wildcard *.cc) OBJS = $(addsuffix .${OBJ_EXT}, $(basename $(OBJSRC))) ! CFLAGS = -DTGLINUX -O3 -DDEBUG CC = g++ --- 5,9 ---- OBJSRC = $(wildcard *.cc) OBJS = $(addsuffix .${OBJ_EXT}, $(basename $(OBJSRC))) ! CFLAGS = -DTGLINUX -O3 -DDEBUG CC = g++ Index: physicnode.h =================================================================== RCS file: /cvsroot/epfl/tgengine-0.1/physicnode.h,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** physicnode.h 19 Nov 2004 12:04:04 -0000 1.9 --- physicnode.h 30 Nov 2004 18:21:56 -0000 1.10 *************** *** 7,10 **** --- 7,11 ---- #include "scenenode.h" #include "quaternion.h" + #include "physicdefs.h" *************** *** 12,15 **** --- 13,18 ---- { + + /** * représentation physique d'un ou plusieurs scenenode *************** *** 20,26 **** { public: ! PhysicNode (SceneNode* n); ~PhysicNode (); inline void AttachNode (SceneNode* s) { vNodes.push_back(s); } --- 23,32 ---- { public: ! PhysicNode (SceneNode* n, int physType=PHYS_WALKING); ~PhysicNode (); + inline void SetPhysicType(int physType) { iPhysicType = physType; } + inline int GetPhysicType() { return iPhysicType; } + inline void AttachNode (SceneNode* s) { vNodes.push_back(s); } *************** *** 45,62 **** inline void SetPhysicCallBack (PhysicCallBack* p) { pPhysicCallBack = p; } - /** - * Doit-on considérer ce node comme un objet physique ? - * @return bool true=physique, false=non-physique - */ - inline bool Clip () { return bClip; } - inline void SetClip (bool b) { bClip = b; } - - /** - * Informations sur la position de l'objet par rapport au sol - * @return bool true=sur le sol, false=en l'air - */ - inline bool OnGround () { return bOnGround; } - inline void SetOnGround (bool b) { bOnGround = b; } - inline bool Trace (Vector3 Begin, Vector3 End, Vector3& colPoint, Vector3& colNormal) { return vNodes[0]->Trace(Begin, End, colPoint, colNormal); } --- 51,54 ---- *************** *** 129,135 **** protected: - bool bClip; - bool bOnGround; bool bBlockTrace; /* Comment cet objet est-il influencé par la gravité */ float fGravityFactor; --- 121,126 ---- protected: bool bBlockTrace; + int iPhysicType; /* Comment cet objet est-il influencé par la gravité */ float fGravityFactor; Index: physiccallback.h =================================================================== RCS file: /cvsroot/epfl/tgengine-0.1/physiccallback.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** physiccallback.h 17 Nov 2004 23:12:38 -0000 1.4 --- physiccallback.h 30 Nov 2004 18:21:55 -0000 1.5 *************** *** 15,19 **** { public: ! virtual void Collide (PhysicNode* other,const Vector3& vPoint, const Vector3& vCollisionNormal) = 0; }; --- 15,37 ---- { public: ! //virtual void Collide (PhysicNode* other,const Vector3& vPoint, const Vector3& vCollisionNormal) = 0; ! /** ! * Méthode appelée lorsque le noeud touche un mur (du monde donc) ! */ ! virtual void HitWall (const Vector3& vPoint, const Vector3& vCollisionNormal, PhysicNode* who) = 0; ! /** ! * Méthode appelée lorsque le noeud a atterit sur le monde (lors d'un saut par exemple) ! */ ! virtual void Landed (const Vector3& vPoint, const Vector3& vCollisionNormal, PhysicNode* who) = 0; ! /** ! * Méthode appelée lorsque le noeud touche un autre noeud ! */ ! virtual void Touch (const Vector3& vPoint, const Vector3& vCollisionNormal, PhysicNode* who, PhysicNode* other) = 0; ! /** ! * Méthode appelée lorsque le noeud arrête de toucher un autre noeud ! */ ! virtual void UnTouch (PhysicNode* who, PhysicNode* other) = 0; ! ! }; |