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); }
public static void removerObjetoFisico(ObjetoFisico of) { objetosFisicos.Remove(of); }
public static void agregarObjetoFisico(ObjetoFisico of) { objetosFisicos.Add(of); }