public bool CollidesWith(ICollider other) //Check with what this is coliding with { ICollider collider = other.GetCollider(); switch (collider) { case Segment seg: return(CollidesWith(seg as Segment)); case OBB o: return(CollidesWith(o as OBB)); case Sphere s: return(CollidesWith(s as Sphere)); default: return(false); } }
/// <summary> /// Devuelve si hay o no colisión entre dos nodos del grafo de escena /// que tengan un collider asociado /// </summary> /// <param name="vector">vector</param> /// <returns>longitud del vector</returns> public static bool Collision(ICollider lhs, ICollider rhs) { Collider colliderL = lhs.GetCollider(); Collider colliderR = rhs.GetCollider(); // los dos collider son rectangulos if (colliderL.IsCircle == false && colliderR.IsCircle == false) return ((ColliderRect)colliderL).Intersects(((ColliderRect)colliderR)); // TODO: interseccion entre otros colliders //else if (colliderL.IsCircle && colliderR.IsCircle) // los dos son círculos // return colliderL.Circle.Intersects(colliderL.Circle); //else if (!colliderL.IsCircle && colliderR.IsCircle) // return colliderR.Circle.Intersects(colliderL.Rectangle); //else // return colliderL.Circle.Intersects(colliderR.Rectangle); return false; }