Esempio n. 1
0
        public OpenXRSettings GetSettingsForBuildTargetGroup(BuildTargetGroup buildTargetGroup)
        {
            OpenXRSettings ret = null;

            Settings.TryGetValue(buildTargetGroup, out ret);
            if (ret == null)
            {
                if (!IsValidBuildTargetGroup(buildTargetGroup))
                {
                    return(null);
                }

                ret = ScriptableObject.CreateInstance <OpenXRSettings>();
                if (Settings.ContainsKey(buildTargetGroup))
                {
                    Settings[buildTargetGroup] = ret;
                }
                else
                {
                    Settings.Add(buildTargetGroup, ret);
                }

                ret.name = buildTargetGroup.ToString();

                AssetDatabase.AddObjectToAsset(ret, this);
            }

            return(ret);
        }
Esempio n. 2
0
        protected override void GetValidationChecks(List <ValidationRule> rules, BuildTargetGroup targetGroup)
        {
            rules.Add(new ValidationRule(this)
            {
                message        = "Only the Oculus Touch Interaction Profile is supported right now.",
                checkPredicate = () =>
                {
                    var settings = OpenXRSettings.GetSettingsForBuildTargetGroup(targetGroup);
                    if (null == settings)
                    {
                        return(false);
                    }

                    bool touchFeatureEnabled            = false;
                    bool otherInteractionFeatureEnabled = false;
                    foreach (var feature in settings.GetFeatures <OpenXRInteractionFeature>())
                    {
                        if (feature.enabled)
                        {
                            if (feature is OculusTouchControllerProfile)
                            {
                                touchFeatureEnabled = true;
                            }
                            else
                            {
                                otherInteractionFeatureEnabled = true;
                            }
                        }
                    }
                    return(touchFeatureEnabled && !otherInteractionFeatureEnabled);
                },
                fixIt = () =>
                {
                    var settings = OpenXRSettings.GetSettingsForBuildTargetGroup(targetGroup);
                    if (null == settings)
                    {
                        return;
                    }

                    foreach (var feature in settings.GetFeatures <OpenXRInteractionFeature>())
                    {
                        feature.enabled = (feature is OculusTouchControllerProfile);
                    }
                },
                error = true,
            });
        }
        /// <summary>
        /// Handle enabled state change to register/unregister device layouts as needed
        /// </summary>
        protected internal override void OnEnabledChange()
        {
            base.OnEnabledChange();

#if UNITY_EDITOR
            // Keep the layouts registered in the editor as long as at least one of the build target
            // groups has the feature enabled.
            var packageSettings = OpenXRSettings.GetPackageSettings();
            var featureType     = GetType();
            if (null != packageSettings && packageSettings.GetFeatures <OpenXRInteractionFeature>().Any(f => f.feature.enabled && featureType.IsAssignableFrom(f.feature.GetType())))
            {
                RegisterDeviceLayout();
            }
            else
            {
                UnregisterDeviceLayout();
            }
#endif
        }
Esempio n. 4
0
        private static OpenXRSettings GetInstance(bool useActiveBuildTarget)
        {
            OpenXRSettings settings = null;

            // When running in the Unity Editor, we have to load user's customization of configuration data directly from
            // EditorBuildSettings. At runtime, we need to grab it from the static instance field instead.
#if UNITY_EDITOR
            settings = GetSettingsForBuildTargetGroup(useActiveBuildTarget ?
                                                      BuildPipeline.GetBuildTargetGroup(UnityEditor.EditorUserBuildSettings.activeBuildTarget) :
                                                      BuildTargetGroup.Standalone);
#else
            settings = s_RuntimeInstance;
            if (settings == null)
            {
                settings = ScriptableObject.CreateInstance <OpenXRSettings>();
            }
#endif

            return(settings);
        }
        /// <summary>
        /// Given a feature id, returns the first <see cref="OpenXRFeature" /> associated with that id.
        /// </summary>
        /// <param name="buildTargetGroup">The build target group to get the feature from.</param>
        /// <param name="featureId">The unique id identifying the feature</param>
        /// <returns>The instance of the feature matching thd id, or null.</returns>
        public static OpenXRFeature GetFeatureWithIdForBuildTarget(BuildTargetGroup buildTargetGroup, string featureId)
        {
            if (String.IsNullOrEmpty(featureId))
            {
                return(null);
            }

            var settings = OpenXRSettings.GetSettingsForBuildTargetGroup(buildTargetGroup);

            if (settings == null)
            {
                return(null);
            }

            foreach (var feature in settings.features)
            {
                if (String.Compare(featureId, feature.featureIdInternal, true) == 0)
                {
                    return(feature);
                }
            }

            return(null);
        }
        internal static void RegisterLayouts()
        {
#if UNITY_EDITOR
            // Find all enabled interaction features and force them to register their device layouts
            var packageSettings = OpenXRSettings.GetPackageSettings();
            if (null == packageSettings)
            {
                return;
            }

            foreach (var feature in packageSettings.GetFeatures <OpenXRInteractionFeature>().Where(f => f.feature.enabled).Select(f => f.feature))
            {
                feature.OnEnabledChange();
            }
#else
            foreach (var feature in OpenXRSettings.Instance.GetFeatures <OpenXRInteractionFeature>())
            {
                if (feature.enabled)
                {
                    ((OpenXRInteractionFeature)feature).RegisterDeviceLayout();
                }
            }
#endif
        }
Esempio n. 7
0
 private void Awake()
 {
     s_RuntimeInstance = this;
 }