public override void HandleUIEvent(GameObject source, object eventData) { if (source == dialogComponent.CreateAccountButton.gameObject) { manager.PushState(new CreateAccount()); } else if (source == dialogComponent.SignInButton.gameObject) { manager.PushState(new SignInWithEmail()); } else if (source == dialogComponent.AnonymousSignIn.gameObject) { manager.PushState( new WaitForTask(auth.SignInAnonymouslyAsync().ContinueWith(t => { SignInState.SetState(SignInState.State.Anonymous); }), StringConstants.LabelSigningIn, true)); } else if (source == dialogComponent.DontSignIn.gameObject) { CommonData.isNotSignedIn = true; manager.PopState(); } else if (source == dialogComponent.GooglePlaySignIn.gameObject) { manager.PushState( new WaitForTask(GooglePlayServicesSignIn.SignIn(), StringConstants.LabelSigningIn, true)); } }
// Initialization method. Called after the state // is added to the stack. public override void Initialize() { auth = Firebase.Auth.FirebaseAuth.DefaultInstance; dialogComponent = SpawnUI <Menus.ChooseSignInGUI>(StringConstants.PrefabsChooseSigninMenu); dialogComponent.GooglePlaySignIn.gameObject.SetActive( GooglePlayServicesSignIn.GooglePlayServicesEnabled()); }
public override void HandleUIEvent(GameObject source, object eventData) { if (source == menuComponent.AddEmailButton.gameObject) { manager.PushState(new AddEmail()); } else if (source == menuComponent.SignOutButton.gameObject) { auth.SignOut(); GooglePlayServicesSignIn.SignOut(); SignInState.SetState(SignInState.State.SignedOut); manager.ClearStack(new Startup()); } else if (source == menuComponent.DeleteAccountButton.gameObject) { manager.SwapState(new ConfirmationDialog(StringConstants.DeleteAccountDialogTitle, StringConstants.DeleteAccountDialogMessage, new DeleteAccount(), null)); } else if (source == menuComponent.AddGooglePlayButton.gameObject) { manager.PushState( new WaitForTask(GooglePlayServicesSignIn.LinkAccount(), StringConstants.LabelSigningIn, true)); } else if (source == menuComponent.MainButton.gameObject) { manager.PopState(); } }
// Resume the state. Called when the state becomes active // when the state above is removed. That state may send an // optional object containing any results/data. Results // can also just be null, if no data is sent. public override void Resume(StateExitValue results) { if (results != null) { if (results.sourceState == typeof(WaitingForDBLoad <UserData>)) { var resultData = results.data as WaitingForDBLoad <UserData> .Results; if (resultData.wasSuccessful) { if (resultData.results != null) { // Got some results back! Use this data. CommonData.currentUser = new DBStruct <UserData>( CommonData.DBUserTablePath + userID, CommonData.app); CommonData.currentUser.Initialize(resultData.results); Debug.Log("Fetched user " + CommonData.currentUser.data.name); } else { // Make a new user, using default credentials. Debug.Log("Could not find user " + userID + " - Creating new profile."); UserData temp = new UserData(); temp.name = StringConstants.DefaultUserName; temp.id = userID; CommonData.currentUser = new DBStruct <UserData>( CommonData.DBUserTablePath + userID, CommonData.app); CommonData.currentUser.Initialize(temp); CommonData.currentUser.PushData(); } } else { // Can't fetch data. Assume internet problems, stay offline. CommonData.currentUser = null; } } } // Whether we successfully fetched, or had to make a new user, // return control to the calling state. manager.PopState(); if (GooglePlayServicesSignIn.CanAutoSignIn()) { manager.PushState( new WaitForTask(GooglePlayServicesSignIn.SignIn(), StringConstants.LabelSigningIn, true)); } }
public override void Resume(StateExitValue results) { ShowUI(); if (results != null) { if (results.sourceState == typeof(WaitForTask)) { WaitForTask.Results taskResults = results.data as WaitForTask.Results; if (taskResults.task.IsFaulted) { manager.SwapState(new ManageAccount()); manager.PushState(new BasicDialog(StringConstants.DeleteAccountFail + taskResults.task.Exception.ToString())); } else { // Delete the user's profile data: string path = CommonData.DBUserTablePath + userId; FirebaseDatabase database = FirebaseDatabase.GetInstance(CommonData.app); // Delete all maps associated with this user: database.GetReference(path).SetValueAsync(null); foreach (MapListEntry map in CommonData.currentUser.data.maps) { path = CommonData.DBMapTablePath + map.mapId; database.GetReference(path).SetValueAsync(null); } GooglePlayServicesSignIn.SignOut(); SignInState.SetState(SignInState.State.SignedOut); manager.SwapState(new ChooseSignInMenu()); manager.PushState(new BasicDialog(StringConstants.DeleteAccountSuccess)); } } } }
// Initialization method. Called after the state // is added to the stack. public override void Initialize() { Time.timeScale = 0.0f; // When the game starts up, it needs to either download the user data // or create a new profile. auth = Firebase.Auth.FirebaseAuth.DefaultInstance; // We go through the full auth system, to request a user id. // If we need to sign in, do that. Otherwise, if we know who we are, // so fetch the user data. if (auth.CurrentUser == null) { if (CommonData.inVrMode || CommonData.testLab.IsTestingScenario) { manager.PushState(new WaitForTask(auth.SignInAnonymouslyAsync(), StringConstants.LabelSigningIn, true)); } else { if (GooglePlayServicesSignIn.CanAutoSignIn()) { manager.PushState( new WaitForTask(GooglePlayServicesSignIn.SignIn(), StringConstants.LabelSigningIn, true)); } else { manager.PushState(new ChooseSignInMenu()); } } } else { manager.PushState(new States.FetchUserData(auth.CurrentUser.UserId)); } }