que acaba de hacer un método abstracto en el objeto Cuerpo llamada Chocó:
abstract class Body
{
abstract void Collision(Body other);
}
class Dog : Body
{
public override void Collision(Body other) {
this.Bark();
}
public void Bark() { ... }
}
Luego, en su función de colisión a llamar a la colisión de los organismos implicados.
public bool OnCollision(Body body1, Body body2)
{
body2.Collision(body2);
}
De esta manera cualquier tipo de cuerpo puede hacer lo que se necesita cuando ocurre una colisión, incluso se podría optimizar este no perder de vista que los cuerpos han sido notificados de las colisiones entre nosostros y reducir el número de llamadas a funciones que se tienen que ejecutar:
public bool OnCollision(Body body1, Body body2)
{
// Record that these two objects have been notified of a collision
// then when these same objects are the only two operands in subsequent calls
// you can just short circuit the calls.
if(!AlreadyNotifiedOfCollision(body1, body2))
{
body1.Collision(body2);
body2.Collision(body1);
NotifiedOfCollision(body1, body2);
}
}
Por supuesto comprobación empírica tendría que hacer para validar que esta comprobación es más rápido que en realidad sólo hacer la llamada dos veces ...
Gracias ¡No me di cuenta de eso! Esto es muy útil. –