/// <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)); } }
/// <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)); }
/// <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); }
/// <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); }