in Assets/Xbox Live/Scripts/SignInManager.cs [60:147]
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
}
}