public static void Update(GameTime gameTime)
 {
     foreach (ObjetoFisico of in objetosFisicos)
     {
         of.isColliding = false;
     }
     for (int i = 0; i < objetosFisicos.Count; i++)
     {
         for (int j = i + 1; j < objetosFisicos.Count; j++)
         {
             ObjetoFisico objetoA = objetosFisicos[i];
             ObjetoFisico objetoB = objetosFisicos[j];
             if (objetoA.Colisiona(objetoB))
             {
                 if (objetoA.OnCollision != null && objetoB.GetObject != null)
                 {
                     objetoA.OnCollision(objetoB.GetObject());
                 }
                 if (objetoB.OnCollision != null && objetoA.GetObject != null)
                 {
                     objetoB.OnCollision(objetoA.GetObject());
                 }
                 if (objetoA.isTrigger || objetoB.isTrigger)
                 {
                     return;
                 }
                 objetoA.isColliding = objetoB.isColliding = true;
                 Vector2 direccionBA = (objetoA.pos - objetoB.pos);
                 Vector2 VelocityBA  = objetoA.vel + objetoB.vel;
                 //direccionBA.Normalize();
                 if (objetoA.isStatic)
                 {
                     objetoB.AplicaFuerza((-direccionBA + -VelocityBA) * 2f, (float)gameTime.ElapsedGameTime.TotalSeconds, true);
                 }
                 else if (!objetoB.isStatic)
                 {
                     objetoA.AplicaFuerza((direccionBA + VelocityBA) * 2f, (float)gameTime.ElapsedGameTime.TotalSeconds);
                 }
                 if (objetoB.isStatic)
                 {
                     objetoA.AplicaFuerza((direccionBA + -VelocityBA) * 2f, (float)gameTime.ElapsedGameTime.TotalSeconds, true);
                 }
                 else if (!objetoA.isStatic)
                 {
                     objetoB.AplicaFuerza((-direccionBA + VelocityBA) * 2f, (float)gameTime.ElapsedGameTime.TotalSeconds);
                 }
             }
         }
         objetosFisicos[i].Update((float)gameTime.ElapsedGameTime.TotalSeconds);
     }
 }
        public bool Colisiona(ObjetoFisico otro)
        {
            bool resultadoColisiona = false;

            foreach (FFOffset ffo in formasFisicasOffset)
            {
                ffo.ff.pos = pos + ffo.offset;
                foreach (FFOffset otro_ffo in otro.formasFisicasOffset)
                {
                    otro_ffo.ff.pos    = otro.pos + otro_ffo.offset;
                    resultadoColisiona = otro_ffo.ff.colisiona(ffo.ff);
                }
            }
            return(resultadoColisiona);
        }
Example #3
0
 public static void removerObjetoFisico(ObjetoFisico of)
 {
     objetosFisicos.Remove(of);
 }
Example #4
0
 public static void agregarObjetoFisico(ObjetoFisico of)
 {
     objetosFisicos.Add(of);
 }