private gvr_value_type GetPropertyValueType(gvr_property_type propertyType) { gvr_value_type propType = gvr_value_type.None; switch (propertyType) { case gvr_property_type.TrackingFloorHeight: propType = gvr_value_type.Float; break; case gvr_property_type.RecenterTransform: propType = gvr_value_type.Mat4f; break; case gvr_property_type.SafetyRegion: propType = gvr_value_type.Int; break; case gvr_property_type.SafetyCylinderInnerRadius: propType = gvr_value_type.Float; break; case gvr_property_type.SafetyCylinderOuterRadius: propType = gvr_value_type.Float; break; } return(propType); }
/// Returns true if a property was available and retrieved. private bool _GvrGetProperty(gvr_property_type propertyType, GvrValue valueOut) { gvr_value_type valueType = GetPropertyValueType(propertyType); if (valueType == gvr_value_type.None) { Debug.LogError("Unknown gvr property " + propertyType + ". Unable to type check."); } if (gvrPropertiesPtr == IntPtr.Zero) { try { gvrPropertiesPtr = gvr_get_current_properties(gvrContextPtr); } catch (EntryPointNotFoundException) { Debug.LogError("GvrHeadset not supported by this version of Unity. " + "Support starts in 5.6.3p3 and 2017.1.1p1."); throw; } } if (gvrPropertiesPtr == IntPtr.Zero) { return(false); } // Assumes that gvr_properties_get (C API) will only ever return // GvrErrorType.None or GvrErrorType.NoEventAvailable. bool success = (GvrErrorType.None == (GvrErrorType)gvr_properties_get(gvrPropertiesPtr, propertyType, valueOut.BufferPtr)); if (success) { valueOut.Parse(); success = (valueType == gvr_value_type.None || valueOut.TypeEnum == valueType); if (!success) { Debug.LogError("GvrGetProperty " + propertyType + " type mismatch, expected " + valueType + " got " + valueOut.TypeEnum); } } return(success); }