XRPlaneSubsystemDescriptor.cs
5.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
using System;
namespace UnityEngine.XR.ARSubsystems
{
/// <summary>
/// Describes the capabilities of an <see cref="XRPlaneSubsystem"/>.
/// </summary>
public class XRPlaneSubsystemDescriptor : SubsystemDescriptor<XRPlaneSubsystem>
{
/// <summary>
/// <c>true</c> if the subsystem supports horizontal plane detection.
/// </summary>
public bool supportsHorizontalPlaneDetection { get; private set; }
/// <summary>
/// <c>true</c> if the subsystem supports vertical plane detection.
/// </summary>
public bool supportsVerticalPlaneDetection { get; private set; }
/// <summary>
/// <c>true</c> if the subsystem supports arbitrarily angled plane detection.
/// </summary>
public bool supportsArbitraryPlaneDetection { get; private set; }
/// <summary>
/// <c>true</c> if the subsystem supports boundary vertices for its planes.
/// </summary>
public bool supportsBoundaryVertices { get; private set; }
/// <summary>
/// <c>true</c> if the current subsystem supports plane classification. Otherwise, <c>false</c>.
/// </summary>
public bool supportsClassification { get; private set; }
/// <summary>
/// Constructor info used to register a descriptor.
/// </summary>
public struct Cinfo : IEquatable<Cinfo>
{
/// <summary>
/// The string identifier for a specific implementation.
/// </summary>
public string id { get; set; }
/// <summary>
/// The concrete <c>Type</c> which will be instantiated if <c>Create</c> is called on this subsystem descriptor.
/// </summary>
public Type subsystemImplementationType { get; set; }
/// <summary>
/// <c>true</c> if the subsystem supports horizontal plane detection.
/// </summary>
public bool supportsHorizontalPlaneDetection { get; set; }
/// <summary>
/// <c>true</c> if the subsystem supports vertical plane detection.
/// </summary>
public bool supportsVerticalPlaneDetection { get; set; }
/// <summary>
/// <c>true</c> if the subsystem supports arbitrarily angled plane detection.
/// </summary>
public bool supportsArbitraryPlaneDetection { get; set; }
/// <summary>
/// <c>true</c> if the subsystem supports boundary vertices for its planes.
/// </summary>
public bool supportsBoundaryVertices { get; set; }
/// <summary>
/// <c>true</c> if the subsystem supports boundary vertices for its planes.
/// </summary>
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);
}
}
/// <summary>
/// Creates a new subsystem descriptor and registers it with the <c>SubsystemManager</c>.
/// </summary>
/// <param name="cinfo">Construction info for the descriptor.</param>
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;
}
}
}