Ejemplo n.º 1
0
        /// <summary>
        /// Define em cada buraco a distância do mesmo para os tees escolhidos pelo utilizador.
        /// </summary>
        private async Task DefinirDistancias()
        {
            //Obter tees utilizados pelos jogadores.
            ObservableCollection <TeeWrapperViewModel> tees = new ObservableCollection <TeeWrapperViewModel>();

            Jogadores.ToList().ForEach(p => tees.Add(p.Tee));

            //Obter distância de cada tee para cada buraco.
            foreach (TeeWrapperViewModel tee in tees)
            {
                //Criar lista vazia onde se vão guardar as distâncias de cada buraco para o tee atual.
                ObservableCollection <TeeBuracoDistanciaWrapperViewModel> distancias = new ObservableCollection <TeeBuracoDistanciaWrapperViewModel>();

                //Percorrer todos os buracos do campo escolhido.
                foreach (BuracoWrapperViewModel buraco in CampoSelecionado.Buracos)
                {
                    //Obter a distância do buraco atual para o tee atual.
                    TeeBuracoDistanciaWrapperViewModel distancia = await _teeDistanciaService.ObterDistancias(buraco, tee);

                    //Se esta distância não tiver sido definida passar logo para o próximo buraco.
                    if (distancia == null)
                    {
                        continue;
                    }

                    //A distância foi definida. Adicionar distância à lista criada anteriormente.
                    distancias.Add(distancia);
                }

                //Adicionar todas as distâncias obtidas ao tee atual.
                distancias.ToList().ForEach(p => tee.AdicionarDistancia(p));
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Recomeça um jogo.
        /// </summary>
        private void RecomecarJogoPausado(JogoWrapperViewModel jogo)
        {
            if (jogo == null)
            {
                return;
            }

            Jogo = jogo;

            Jogo.BuracoAtual = Jogo.BuracoPausado;

            //Guardar numa lista todos os tees usados pelos jogadores para mostrar no picker.
            TeesUsados = new ObservableCollection <TeeWrapperViewModel>();
            Jogo.Jogadores.ToList().ForEach(p => TeesUsados.Add(p.Tee));

            TeeSelecionado = TeesUsados[0];

            //Atualizar posição dos pins.
            TeeBuracoDistanciaWrapperViewModel teeDistanciaInicial = TeeSelecionado.TeeBuracosDistancia.Where(p => p.Buraco.Numero.Equals(Jogo.BuracoAtual.Numero)).FirstOrDefault();

            BuracoPinPosicao = new Position(Jogo.BuracoAtual.Latitude, Jogo.BuracoAtual.Longitude);
            TeePinPosicao    = new Position(teeDistanciaInicial.Latitude, teeDistanciaInicial.Longitude);

            MeioPinPosicao = _geometriaService.ObterPosicaoMeio(BuracoPinPosicao, TeePinPosicao);

            //Atualizar as coordenadas do mapa para estarem voltadas para as coordenadas do primeiro buraco.
            CentroMapa = MapSpan.FromCenterAndRadius(new Position(MeioPinPosicao.Latitude, MeioPinPosicao.Longitude), Distance.FromMeters(80));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Atualiza a posição do marker do Tee para a posição do TeeSelecionado.
        /// </summary>
        private void AtualizarPosicaoTeePin()
        {
            TeeBuracoDistanciaWrapperViewModel teeBuracoDistancia = TeeSelecionado.TeeBuracosDistancia.Where(p => p.Buraco.Numero.Equals(Jogo.BuracoAtual.Numero)).FirstOrDefault();
            Position novaPosicao = new Position(teeBuracoDistancia.Latitude, teeBuracoDistancia.Longitude);

            TeePinPosicao = novaPosicao;
            //Enviar nova posição para o CustomRenderer do CustomMap.
            MediadorMensagensService.Instancia.Avisar(MediadorMensagensService.ViewModelMensagens.NovaPosicaoTeePin, TeePinPosicao);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Atualiza a posição do Tee Pin para o TeeSelecionado e a posição do Tee Meio para o meio. Atualiza a region mostrada
        /// pelo mapa.
        /// </summary>
        private void ResetMapa()
        {
            //Fazer Reset à posição do Pin Tee.
            TeeBuracoDistanciaWrapperViewModel distancia = TeeSelecionado.TeeBuracosDistancia.Where(p => p.Buraco.Numero.Equals(Jogo.BuracoAtual.Numero)).FirstOrDefault();

            TeePinPosicao = new Position(distancia.Latitude, distancia.Longitude);
            MediadorMensagensService.Instancia.Avisar(MediadorMensagensService.ViewModelMensagens.NovaPosicaoTeePin, TeePinPosicao);
            //Fazer Reset à posição do Pin Meio.
            MeioPinPosicao = _geometriaService.ObterPosicaoMeio(BuracoPinPosicao, TeePinPosicao);
            MediadorMensagensService.Instancia.Avisar(MediadorMensagensService.ViewModelMensagens.NovaPosicaoMeio, MeioPinPosicao);
            //Atualizar region mostrada pelo mapa.
            CentroMapa = MapSpan.FromCenterAndRadius(new Position(MeioPinPosicao.Latitude, MeioPinPosicao.Longitude), Distance.FromMeters(80));
            MediadorMensagensService.Instancia.Avisar(MediadorMensagensService.ViewModelMensagens.ResetRegionMapa, CentroMapa);
        }