public void Update() { collisionWorld.PerformDiscreteCollisionDetection(); int numManifolds = collisionWorld.Dispatcher.NumManifolds; for (int i = 0; i < numManifolds; i++) { PersistentManifold contactManifold = collisionWorld.Dispatcher.GetManifoldByIndexInternal(i); CollisionObject obA = contactManifold.Body0; CollisionObject obB = contactManifold.Body1; int misilId = obB.UserIndex; int objetoId = obA.UserIndex; if (objetoId == ID_XWING && EsMisilEnemigo(misilId) && !Xwing.ESTADO_BARREL.BARRELROLL.Equals(VariablesGlobales.xwing.getEstadoBarrel()) && !listaIdMisilesQueColisionaronConXwing.Contains(misilId)) { XwingCollision(contactManifold, misilId); } if (EsTorreta(objetoId) && EsMisilXWing(misilId) && !(listaColisionesTorretaMisil.Contains(new Colision(objetoId, misilId)))) { TorretaCollision(contactManifold, misilId, objetoId); } if (EsObstaculo(objetoId) && EsMisilXWing(misilId) && !(listaColisionesObstaculoMisil.Contains(new Colision(objetoId, misilId)))) { ObstaculoCollision(contactManifold, misilId, objetoId); } if (objetoId == ID_XWING && (misilId == ID_PARED_OBSTACULO || EsTorreta(misilId))) { VariablesGlobales.xwing.ChocarPared(); } collisionWorld.Dispatcher.ClearManifold(contactManifold); } }