vorrei solo fare un metodo astratto sull'oggetto corpo chiamato in collisione:
abstract class Body
{
abstract void Collision(Body other);
}
class Dog : Body
{
public override void Collision(Body other) {
this.Bark();
}
public void Bark() { ... }
}
Poi nella funzione di collisione basta chiamare Collision sui corpi coinvolti.
public bool OnCollision(Body body1, Body body2)
{
body2.Collision(body2);
}
In questo modo qualsiasi tipo di corpo può fare tutto ciò di cui ha bisogno in caso di collisione accade, si potrebbe anche ottimizzare questo per tenere traccia di quali organismi sono state informate di collisioni con la vicenda e ridurre il numero di chiamate di funzione che si devono eseguire:
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);
}
}
Naturalmente verifica empirica avrebbe dovuto essere fatto per verificare che questo controllo è più veloce che in realtà solo facendo la chiamata due volte ...
Grazie non me ne sono reso conto! Questo è molto utile. –