Beispiel #1
0
    public IEnumerator InitializeXboxLiveUser()
    {
        yield return(null);

#if ENABLE_WINMD_SUPPORT
        if (!XboxLiveUserManager.Instance.SingleUserModeEnabled && this.XboxLiveUser != null && this.XboxLiveUser.WindowsSystemUser == null)
        {
            var autoPicker = new Windows.System.UserPicker {
                AllowGuestAccounts = this.AllowGuestAccounts
            };
            autoPicker.PickSingleUserAsync().AsTask().ContinueWith(
                task =>
            {
                if (task.Status == TaskStatus.RanToCompletion)
                {
                    if (task.Result == null)
                    {
                        UnityEngine.WSA.Application.InvokeOnAppThread(() => this.Refresh(), false);
                    }
                    else
                    {
                        this.XboxLiveUser.Initialize(task.Result);
                        this.ExecuteOnMainThread.Enqueue(() => { StartCoroutine(this.SignInAsync()); });
                    }
                }
                else
                {
                    if (XboxLiveServicesSettings.Instance.DebugLogsOn)
                    {
                        Debug.Log("Exception occured: " + task.Exception.Message);
                    }
                    UnityEngine.WSA.Application.InvokeOnAppThread(() => this.Refresh(), false);
                }
            });
        }
        else
        {
            if (this.XboxLiveUser == null)
            {
                this.XboxLiveUser = XboxLiveUserManager.Instance.UserForSingleUserMode;
            }
            if (this.XboxLiveUser.User == null)
            {
                this.XboxLiveUser.Initialize();
            }
            yield return(this.SignInAsync());
        }
#else
        if (XboxLiveUserManager.Instance.SingleUserModeEnabled && this.XboxLiveUser == null)
        {
            this.XboxLiveUser = XboxLiveUserManager.Instance.GetSingleModeUser();
        }

        this.XboxLiveUser.Initialize();
        yield return(this.SignInAsync());
#endif
    }
Beispiel #2
0
    public IEnumerator InitializeXboxLiveUser()
    {
        yield return(null);

        // Disable the sign-in button
        this.signInPanel.GetComponentInChildren <Button>().interactable = false;

#if ENABLE_WINMD_SUPPORT
        if (!XboxLiveUserManager.Instance.SingleUserModeEnabled && this.XboxLiveUser != null && this.XboxLiveUser.WindowsSystemUser == null)
        {
            var autoPicker = new Windows.System.UserPicker {
                AllowGuestAccounts = this.AllowGuestAccounts
            };
            autoPicker.PickSingleUserAsync().AsTask().ContinueWith(
                task =>
            {
                if (task.Status == TaskStatus.RanToCompletion)
                {
                    this.XboxLiveUser.WindowsSystemUser = task.Result;
                    this.XboxLiveUser.Initialize();
                }
                else
                {
                    if (XboxLiveServicesSettings.Instance.DebugLogsOn)
                    {
                        Debug.Log("Exception occured: " + task.Exception.Message);
                    }
                }
            });
        }
        else
        {
            if (this.XboxLiveUser == null)
            {
                this.XboxLiveUser = XboxLiveUserManager.Instance.UserForSingleUserMode;
            }
            if (this.XboxLiveUser.User == null)
            {
                this.XboxLiveUser.Initialize();
            }
        }
#else
        if (XboxLiveUserManager.Instance.SingleUserModeEnabled && this.XboxLiveUser == null)
        {
            this.XboxLiveUser = XboxLiveUserManager.Instance.GetSingleModeUser();
        }

        this.XboxLiveUser.Initialize();
#endif
    }
        /// <summary>
        /// Adds and signs in a new Xbox Live User and assigns it a player number.
        /// Note: Different platforms support a different number of users.
        /// AddUser might fail if the player number is not within the range of supported users.
        /// </summary>
        /// <param name="playerNumber">The Player Number that should be assigned to the Xbox Live User</param>
        public IEnumerator SignInPlayer(int playerNumber)
        {
            yield return(null);

            if (ValidatePlayerNumber(playerNumber, "Add User", XboxLiveOperationType.SignIn))
            {
                if (!CurrentPlayers.ContainsKey(playerNumber))
                {
                    var newPlayerInfo = new XboxLivePlayerInfo()
                    {
                        SignInCallbacks  = new List <UnityAction <XboxLiveUser, XboxLiveAuthStatus, string> >(),
                        SignOutCallbacks = new List <UnityAction <XboxLiveUser, XboxLiveAuthStatus, string> >()
                    };
                    this.CurrentPlayers.Add(playerNumber, newPlayerInfo);
                }

#if ENABLE_WINMD_SUPPORT
                var playerInfo = this.CurrentPlayers[playerNumber];
                if (this.GetMaximumNumberOfPlayers() > 1)
                {
                    var autoPicker = new Windows.System.UserPicker {
                        AllowGuestAccounts = false
                    };
                    autoPicker.PickSingleUserAsync().AsTask().ContinueWith(
                        task =>
                    {
                        if (task.Status == TaskStatus.RanToCompletion)
                        {
                            playerInfo.WindowsUser         = task.Result;
                            playerInfo.XboxLiveUser        = new XboxLiveUser(playerInfo.WindowsUser);
                            XboxLiveUser.SignOutCompleted += XboxLiveUserSignOutCompleted;
                            this.PlayersPendingSignIn.Add(playerNumber);
                            this.StartCoroutine(this.SignInAsync(playerNumber, this.CurrentPlayers[playerNumber]));
                        }
                        else
                        {
                            if (XboxLiveServicesSettings.Instance.DebugLogsOn)
                            {
                                Debug.Log("Exception occured: " + task.Exception.Message);
                            }
                        }
                    });
                }
                else
                {
                    var usersTask = Windows.System.User.FindAllAsync().AsTask();
                    if (usersTask.Status == TaskStatus.RanToCompletion && usersTask.Result != null && usersTask.Result.Count > 0)
                    {
                        var windowsUser = usersTask.Result[0];
                        this.CurrentPlayers[playerNumber].WindowsUser  = windowsUser;
                        this.CurrentPlayers[playerNumber].XboxLiveUser = new XboxLiveUser(windowsUser);
                        this.StartCoroutine(this.SignInAsync(playerNumber, this.CurrentPlayers[playerNumber]));
                    }
                    else
                    {
                        this.CurrentPlayers[playerNumber].XboxLiveUser = new XboxLiveUser();
                        XboxLiveUser.SignOutCompleted += XboxLiveUserSignOutCompleted;
                        this.StartCoroutine(this.SignInAsync(playerNumber, this.CurrentPlayers[playerNumber]));
                    }
                }
#else
                this.CurrentPlayers[playerNumber].XboxLiveUser = new XboxLiveUser();
                XboxLiveUser.SignOutCompleted += XboxLiveUserSignOutCompleted;
                this.StartCoroutine(this.SignInAsync(playerNumber, this.CurrentPlayers[playerNumber]));
#endif
            }
        }
        /// <summary>
        /// Adds and signs in a new Xbox Live User and assigns it a player number.
        /// Note: Different platforms support a different number of users.
        /// AddUser might fail if the player number is not within the range of supported users.
        /// </summary>
        /// <param name="playerNumber">The Player Number that should be assigned to the Xbox Live User</param>
        public IEnumerator SignInPlayer(int playerNumber)
        {
            yield return(null);

            if (ValidatePlayerNumber(playerNumber, "Add User", XboxLiveOperationType.SignIn))
            {
                if (!CurrentPlayers.ContainsKey(playerNumber))
                {
                    var newPlayerInfo = new XboxLivePlayerInfo()
                    {
                        SignInCallbacks  = new List <UnityAction <XboxLiveUser, XboxLiveAuthStatus, string> >(),
                        SignOutCallbacks = new List <UnityAction <XboxLiveUser, XboxLiveAuthStatus, string> >()
                    };
                    this.CurrentPlayers.Add(playerNumber, newPlayerInfo);
                }

#if ENABLE_WINMD_SUPPORT
                var playerInfo = this.CurrentPlayers[playerNumber];
                if (this.GetMaximumNumberOfPlayers() > 1)
                {
                    var autoPicker = new Windows.System.UserPicker {
                        AllowGuestAccounts = false
                    };
                    var userPicked = false;
                    autoPicker.PickSingleUserAsync().AsTask().ContinueWith(
                        task =>
                    {
                        if (task.Status == TaskStatus.RanToCompletion)
                        {
                            if (task.Result != null)
                            {
                                playerInfo.WindowsUser         = task.Result;
                                playerInfo.XboxLiveUser        = new XboxLiveUser(playerInfo.WindowsUser);
                                XboxLiveUser.SignOutCompleted += XboxLiveUserSignOutCompleted;
                                this.PlayersPendingSignIn.Add(playerNumber);
                                userPicked = true;
                            }
                            else
                            {
                                userPicked = false;
                                NotifyAllCallbacks(playerNumber, null, XboxLiveAuthStatus.Canceled, "Sign In Failed: Player " + playerNumber + " failed. Status: Canceled by the User.");
                            }
                        }
                        else
                        {
                            if (task.Status == TaskStatus.Canceled)
                            {
                                userPicked = false;
                                NotifyAllCallbacks(playerNumber, null, XboxLiveAuthStatus.Canceled, "Sign In Failed: Player " + playerNumber + " failed. Status: Canceled by the User.");
                            }
                            else
                            {
                                if (task.Status == TaskStatus.Faulted)
                                {
                                    ExceptionManager.Instance.ThrowException(
                                        ExceptionSource.SignInManager,
                                        ExceptionType.SignInFailed,
                                        task.Exception);
                                    userPicked = false;
                                    NotifyAllCallbacks(playerNumber, null, XboxLiveAuthStatus.Failed, "Sign In Failed: Player " + playerNumber + " failed.");
                                }
                            }
                        }
                    });
                    if (userPicked)
                    {
                        this.StartCoroutine(this.SignInAsync(playerNumber, this.CurrentPlayers[playerNumber]));
                    }
                }
                else
                {
                    var usersTask = Windows.System.User.FindAllAsync().AsTask();
                    if (usersTask.Status == TaskStatus.RanToCompletion && usersTask.Result != null && usersTask.Result.Count > 0)
                    {
                        var windowsUser = usersTask.Result[0];
                        this.CurrentPlayers[playerNumber].WindowsUser  = windowsUser;
                        this.CurrentPlayers[playerNumber].XboxLiveUser = new XboxLiveUser(windowsUser);
                        this.StartCoroutine(this.SignInAsync(playerNumber, this.CurrentPlayers[playerNumber]));
                    }
                    else
                    {
                        this.CurrentPlayers[playerNumber].XboxLiveUser = new XboxLiveUser();
                        XboxLiveUser.SignOutCompleted += XboxLiveUserSignOutCompleted;
                        this.StartCoroutine(this.SignInAsync(playerNumber, this.CurrentPlayers[playerNumber]));
                    }
                }
#else
                this.CurrentPlayers[playerNumber].XboxLiveUser = new XboxLiveUser();
                XboxLiveUser.SignOutCompleted += XboxLiveUserSignOutCompleted;
                this.StartCoroutine(this.SignInAsync(playerNumber, this.CurrentPlayers[playerNumber]));
#endif
            }
        }