コード例 #1
0
 static void RunAvailabilityCheck(SupportsInstall supportsInstall, SessionAvailability availability)
 {
     ARSession.s_State = ARSessionState.None;
     InitMock(supportsInstall, availability);
     CheckAvailabilitySync();
     DeinitMock();
 }
コード例 #2
0
        /// <summary>
        /// Begin installing AR software on the current device (if supported).
        /// </summary>
        /// <remarks>
        /// Installation may be asynchronous, so this is implemented as a coroutine.
        /// It is safe to call this multiple times; if called a second time while an installation
        /// is in process, it returns a new coroutine which waits on the first.
        /// </remarks>
        /// <returns>An <c>IEnumerator</c> used for a coroutine.</returns>
        public static IEnumerator Install()
        {
            if (systemState == ARSystemState.Installing)
            {
                yield return(new WaitWhile(() => { return systemState == ARSystemState.Installing; }));
            }

            if ((sessionSubsystem == null) || (systemState != ARSystemState.NeedsInstall))
            {
                yield break;
            }

            systemState = ARSystemState.Installing;
            var installPromise = sessionSubsystem.InstallAsync();

            yield return(installPromise);

            var installStatus = installPromise.result;

            if (installStatus == SessionInstallationStatus.Success)
            {
                systemState    = ARSystemState.Ready;
                s_Availability = (s_Availability | SessionAvailability.Installed);
            }
            else if (installStatus == SessionInstallationStatus.ErrorUserDeclined)
            {
                systemState = ARSystemState.NeedsInstall;
            }
            else
            {
                systemState = ARSystemState.Unsupported;
            }
        }
コード例 #3
0
        static void InitMock(SupportsInstall supportsInstall, SessionAvailability availability)
        {
            MockLoader.supportsInstall = supportsInstall;
            MockProvider.availability  = availability;
            var xrManager = ScriptableObject.CreateInstance <XRManagerSettings>();

            xrManager.loaders.Clear();
            xrManager.loaders.Add(ScriptableObject.CreateInstance <MockLoader>());
            xrManager.InitializeLoaderSync();
            XRGeneralSettings.Instance         = ScriptableObject.CreateInstance <XRGeneralSettings>();
            XRGeneralSettings.Instance.Manager = xrManager;
        }
コード例 #4
0
        /// <summary>
        /// Start checking the availability of AR on the current device.
        /// </summary>
        /// <remarks>
        /// The availability check may be asynchronous, so this is implemented as a coroutine.
        /// It is safe to call this multiple times; if called a second time while an availability
        /// check is being made, it returns a new coroutine which waits on the first.
        /// </remarks>
        /// <returns>An <c>IEnumerator</c> used for a coroutine.</returns>
        public static IEnumerator CheckAvailability()
        {
            if (systemState == ARSystemState.CheckingAvailability)
            {
                yield return(new WaitWhile(() => { return systemState == ARSystemState.CheckingAvailability; }));
            }

            // Availability has already been determined if we make it here and the state is not None.
            if (systemState != ARSystemState.None)
            {
                yield break;
            }

            if (sessionSubsystem == null)
            {
                systemState = ARSystemState.Unsupported;
            }
            else if (systemState == ARSystemState.None)
            {
                systemState = ARSystemState.CheckingAvailability;
                var availabilityPromise = sessionSubsystem.GetAvailabilityAsync();
                yield return(availabilityPromise);

                s_Availability = availabilityPromise.result;

                if (s_Availability.IsSupported() && s_Availability.IsInstalled())
                {
                    systemState = ARSystemState.Ready;
                }
                else if (s_Availability.IsSupported() && !s_Availability.IsInstalled())
                {
                    systemState = ARSystemState.NeedsInstall;
                }
                else
                {
                    systemState = ARSystemState.Unsupported;
                }
            }
        }
コード例 #5
0
 /// <summary>
 /// A helper method for <see cref="SessionAvailability"/> flags.
 /// </summary>
 /// <param name="availability">A <see cref="SessionAvailability"/> enum</param>
 /// <returns>True if the <see cref="SessionAvailability.Installed"/> flag is set.</returns>
 public static bool IsInstalled(this SessionAvailability availability)
 {
     return((availability & SessionAvailability.Installed) != SessionAvailability.None);
 }
コード例 #6
0
 /// <summary>
 /// A helper method for <see cref="SessionAvailability"/> flags.
 /// </summary>
 /// <param name="availability">A <see cref="SessionAvailability"/> enum</param>
 /// <returns>True if the <see cref="SessionAvailability.Supported"/> flag is set.</returns>
 public static bool IsSupported(this SessionAvailability availability)
 {
     return((availability & SessionAvailability.Supported) != SessionAvailability.None);
 }