using System; namespace UnityEngine.XR.ARSubsystems { /// /// Describes the capabilities of an . /// public class XRPlaneSubsystemDescriptor : SubsystemDescriptor { /// /// true if the subsystem supports horizontal plane detection. /// public bool supportsHorizontalPlaneDetection { get; private set; } /// /// true if the subsystem supports vertical plane detection. /// public bool supportsVerticalPlaneDetection { get; private set; } /// /// true if the subsystem supports arbitrarily angled plane detection. /// public bool supportsArbitraryPlaneDetection { get; private set; } /// /// true if the subsystem supports boundary vertices for its planes. /// public bool supportsBoundaryVertices { get; private set; } /// /// true if the current subsystem supports plane classification. Otherwise, false. /// public bool supportsClassification { get; private set; } /// /// Constructor info used to register a descriptor. /// public struct Cinfo : IEquatable { /// /// The string identifier for a specific implementation. /// public string id { get; set; } /// /// The concrete Type which will be instantiated if Create is called on this subsystem descriptor. /// public Type subsystemImplementationType { get; set; } /// /// true if the subsystem supports horizontal plane detection. /// public bool supportsHorizontalPlaneDetection { get; set; } /// /// true if the subsystem supports vertical plane detection. /// public bool supportsVerticalPlaneDetection { get; set; } /// /// true if the subsystem supports arbitrarily angled plane detection. /// public bool supportsArbitraryPlaneDetection { get; set; } /// /// true if the subsystem supports boundary vertices for its planes. /// public bool supportsBoundaryVertices { get; set; } /// /// true if the subsystem supports boundary vertices for its planes. /// public bool supportsClassification { get; set; } public bool Equals(Cinfo other) { return id.Equals(other.id) && (subsystemImplementationType == other.subsystemImplementationType) && (supportsHorizontalPlaneDetection == other.supportsHorizontalPlaneDetection) && (supportsVerticalPlaneDetection == other.supportsVerticalPlaneDetection) && (supportsArbitraryPlaneDetection == other.supportsArbitraryPlaneDetection) && (supportsClassification == other.supportsClassification) && (supportsBoundaryVertices == other.supportsBoundaryVertices); } public override bool Equals(object obj) { if (!(obj is Cinfo)) return false; return Equals((Cinfo)obj); } public override int GetHashCode() { unchecked { var hashCode = id.GetHashCode(); hashCode = (hashCode * 486187739) + subsystemImplementationType.GetHashCode(); hashCode = (hashCode * 486187739) + supportsHorizontalPlaneDetection.GetHashCode(); hashCode = (hashCode * 486187739) + supportsVerticalPlaneDetection.GetHashCode(); hashCode = (hashCode * 486187739) + supportsArbitraryPlaneDetection.GetHashCode(); hashCode = (hashCode * 486187739) + supportsBoundaryVertices.GetHashCode(); hashCode = (hashCode * 486187739) + supportsClassification.GetHashCode(); return hashCode; } } public static bool operator ==(Cinfo lhs, Cinfo rhs) { return lhs.Equals(rhs); } public static bool operator !=(Cinfo lhs, Cinfo rhs) { return !lhs.Equals(rhs); } } /// /// Creates a new subsystem descriptor and registers it with the SubsystemManager. /// /// Construction info for the descriptor. public static void Create(Cinfo cinfo) { var descriptor = new XRPlaneSubsystemDescriptor(cinfo); SubsystemRegistration.CreateDescriptor(descriptor); } XRPlaneSubsystemDescriptor(Cinfo cinfo) { id = cinfo.id; subsystemImplementationType = cinfo.subsystemImplementationType; supportsHorizontalPlaneDetection = cinfo.supportsHorizontalPlaneDetection; supportsVerticalPlaneDetection = cinfo.supportsVerticalPlaneDetection; supportsArbitraryPlaneDetection = cinfo.supportsArbitraryPlaneDetection; supportsBoundaryVertices = cinfo.supportsBoundaryVertices; supportsClassification = cinfo.supportsClassification; } } }