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 }
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 } }