/// <summary> /// /// </summary> /// <param name="parameter">MapPokemonWrapper containing the Pokemon that we're trying to capture</param> /// <param name="mode"></param> /// <param name="suspensionState"></param> /// <returns></returns> public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary <string, object> suspensionState) { if (suspensionState.Any()) { // Recovering the state CurrentPokemon = (MapPokemonWrapper)suspensionState[nameof(CurrentPokemon)]; CurrentEncounter = (EncounterResponse)suspensionState[nameof(CurrentEncounter)]; CurrentCaptureAward = (CaptureAward)suspensionState[nameof(CurrentCaptureAward)]; SelectedCaptureItem = (ItemData)suspensionState[nameof(SelectedCaptureItem)]; } else if (parameter is bool) { // Navigating from game page, so we need to actually load the encounter CurrentPokemon = (MapPokemonWrapper)NavigationHelper.NavigationState[nameof(CurrentPokemon)]; Busy.SetBusy(true, Utils.Resources.Translation.GetString("LoadingEncounter") + Utils.Resources.Pokemon.GetString(CurrentPokemon.PokemonId.ToString())); NavigationHelper.NavigationState.Remove(nameof(CurrentPokemon)); Logger.Write($"Catching {CurrentPokemon.PokemonId}"); CurrentEncounter = await GameClient.EncounterPokemon(CurrentPokemon.EncounterId, CurrentPokemon.SpawnpointId); SelectedCaptureItem = ItemsInventory.First(item => item.ItemId == ItemId.ItemPokeBall); Busy.SetBusy(false); if (CurrentEncounter.Status != EncounterResponse.Types.Status.EncounterSuccess) { // Encounter failed, probably the Pokemon ran away await new MessageDialog("Pokemon ran away, sorry :(").ShowAsyncQueue(); ReturnToGameScreen.Execute(); } } await Task.CompletedTask; }
/// <summary> /// Selects the first ball based on available items /// </summary> private void SelectStartingBall() { // Set default item (switch to other balls if user has none) SelectedCaptureItem = ItemsInventory.First(item => item.ItemId == ItemId.ItemPokeBall); while (SelectedCaptureItem.Count == 0) { switch (SelectedCaptureItem.ItemId) { case ItemId.ItemPokeBall: // Try with Greatball SelectedCaptureItem = ItemsInventory.First(item => item.ItemId == ItemId.ItemGreatBall); break; case ItemId.ItemGreatBall: // Try with Ultraball SelectedCaptureItem = ItemsInventory.First(item => item.ItemId == ItemId.ItemUltraBall); break; case ItemId.ItemUltraBall: // Try with Masterball SelectedCaptureItem = ItemsInventory.First(item => item.ItemId == ItemId.ItemMasterBall); break; case ItemId.ItemMasterBall: // User has no left balls, choose Pokeball to stop him from trying to capture SelectedCaptureItem = ItemsInventory.First(item => item.ItemId == ItemId.ItemPokeBall); return; } } }
/// <summary> /// Selects the first ball based on available items /// </summary> private void SelectStartingBall(bool keepPreviousSelection = false) { // Set default item (switch to other balls if user has none) if (!keepPreviousSelection) { SelectedCaptureItem = ItemsInventory.First(item => item.ItemId == ItemId.ItemPokeBall) ?? new ItemData { Count = 0, ItemId = ItemId.ItemPokeBall }; } else { // Start with a ball of the same type as the one that's currently used SelectedCaptureItem = ItemsInventory.First(item => item.ItemId == SelectedCaptureItem.ItemId); } while (SelectedCaptureItem != null && SelectedCaptureItem.Count == 0) { switch (SelectedCaptureItem.ItemId) { case ItemId.ItemPokeBall: // Try with Greatball SelectedCaptureItem = ItemsInventory.FirstOrDefault(item => item.ItemId == ItemId.ItemGreatBall); if (SelectedCaptureItem == null) { SelectedCaptureItem = new ItemData() { Count = 0, ItemId = ItemId.ItemGreatBall }; } break; case ItemId.ItemGreatBall: // Try with Ultraball SelectedCaptureItem = ItemsInventory.FirstOrDefault(item => item.ItemId == ItemId.ItemUltraBall); if (SelectedCaptureItem == null) { SelectedCaptureItem = new ItemData() { Count = 0, ItemId = ItemId.ItemUltraBall }; } break; case ItemId.ItemUltraBall: // Try with Masterball SelectedCaptureItem = ItemsInventory.FirstOrDefault(item => item.ItemId == ItemId.ItemMasterBall); if (SelectedCaptureItem == null) { SelectedCaptureItem = new ItemData() { Count = 0, ItemId = ItemId.ItemMasterBall }; } break; case ItemId.ItemMasterBall: // User has no left balls, choose a non-existing Pokeball to stop him from trying to capture SelectedCaptureItem = new ItemData { Count = 0, ItemId = ItemId.ItemPokeBall }; return; } } }
public CapturePokemonPageViewModel() { // Set default item SelectedCaptureItem = ItemsInventory.First(item => item.ItemId == ItemId.ItemPokeBall); }