using System;
namespace Framework.Geometry.Lines.Intersection {
/// Contact invervals between a line and another shape
public struct LineContacts {
/// A line contacts instance for reporting no contacts
public static readonly LineContacts None = new LineContacts(float.NaN, float.NaN);
/// Time the first contact was made
public float EntryTime;
/// Time the last contact occurred
public float ExitTime;
/// Initializes a new contact point
/// Time the contact was made at
public LineContacts(float touchTime) :
this(touchTime, touchTime) { }
/// Initializes a new contact point
/// Time the first contact was made at
/// Time the last contact has occured
public LineContacts(float entryTime, float exitTime) {
this.EntryTime = entryTime;
this.ExitTime = exitTime;
}
/// Whether a contact is stored in the line contacts instance
public bool HasContact {
get { return (!float.IsNaN(this.EntryTime) && !float.IsNaN(this.ExitTime)); }
}
///
/// Determines whether this instance is identical to another instance
///
/// Other instance of compare against
/// True if both instances are identical
public override bool Equals(object otherObject) {
if(!(otherObject is LineContacts)) {
return false;
}
LineContacts other = (LineContacts)otherObject;
return
(this.EntryTime == other.EntryTime) &&
(this.ExitTime == other.ExitTime);
}
/// Returns a hash code for the instance
/// The instance's hash code
public override int GetHashCode() {
return this.EntryTime.GetHashCode() ^ this.ExitTime.GetHashCode();
}
}
} // namespace Framework.Geometry.Lines.Intersection