Пример #1
0
        async void Done_Handle_Clicked(object sender, System.EventArgs e)
        {
            if (((MapViewModel)map.BindingContext).Pins.Count == 1 && LblGeoObjectName.TextColor.Equals(Color.Black))
            {
                BtnDone.Source = "Next.png";
                pauseTimer     = true;

                if (randomObject.Key.Equals("streets"))
                {
                    var possibleAddresses = await geoCoder.GetAddressesForPositionAsync(((MapViewModel)map.BindingContext).Pins[0].Position);

                    foreach (var address in possibleAddresses)
                    {
                        if (address.Contains(LblGeoObjectName.Text))
                        {
                            // Correct
                            LblGeoObjectName.Text      = "Correct!";
                            LblGeoObjectName.TextColor = Color.Green;

                            return;
                        }
                    }

                    // If we land here, the chosen answer wasn't right
                    var possiblePositions = await geoCoder.GetPositionsForAddressAsync(LblGeoObjectName.Text + ", Linz");

                    foreach (var position in possiblePositions)
                    {
                        ((MapViewModel)map.BindingContext).addSolutionPin(position, LblGeoObjectName.Text);
                        map.MoveToMapRegion(MapSpan.FromCenterAndRadius(position, Distance.FromKilometers(5)), true);

                        var currentDistance = distance(position, ((MapViewModel)map.BindingContext).Pins[0].Position);
                        sumDistance               += currentDistance;
                        LblGeoObjectName.Text      = string.Format("Distance to location: {0:0.00}km", currentDistance);
                        LblGeoObjectName.TextColor = Color.Red;

                        break;
                    }
                }
                else // Other categories
                {
                    Position correctPosition = new Position(randomObject.Value.latitude, randomObject.Value.longitude);

                    ((MapViewModel)map.BindingContext).addSolutionPin(correctPosition, LblGeoObjectName.Text);
                    map.MoveToMapRegion(MapSpan.FromCenterAndRadius(new Position(randomObject.Value.latitude, randomObject.Value.longitude), Distance.FromKilometers(5)), true);

                    var dist = distance(correctPosition, ((MapViewModel)map.BindingContext).Pins[0].Position);
                    sumDistance += dist;

                    if (dist < 0.05)
                    {
                        // Correct
                        LblGeoObjectName.Text      = "Correct!";
                        LblGeoObjectName.TextColor = Color.Green;
                    }
                    else
                    {
                        LblGeoObjectName.Text      = string.Format("Distance to location: {0:0.00}km", dist);
                        LblGeoObjectName.TextColor = Color.Red;
                    }
                }
            }
            else if (!LblGeoObjectName.TextColor.Equals(Color.Black))
            {
                // check if we reached question limit
                if (curQuestionNr < numberOfQuestions)
                {
                    ((MapViewModel)map.BindingContext).clearPins();

                    map.MoveToMapRegion(MapSpan.FromCenterAndRadius(new Position(48.286998, 14.294665), Distance.FromKilometers(5)), true);
                    setNewStreet();
                }
                else
                {
                    await saveStatistics();

                    await Navigation.PushModalAsync(new GameResult(sumDistance / numberOfQuestions));
                }
            }
        }