예제 #1
0
        public ItemsViewModel()
        {
            Title            = "Classificação";
            Items            = new ObservableCollection <Classificacao>();
            Jogadores        = new ObservableCollection <Jogador>();
            LoadItemsCommand = new Command(async() =>
            {
                await ExecuteLoadJogadoresCommand();
                await ExecuteLoadClassificacaoCommand();
            });

            MessagingCenter.Subscribe <NewItemPage, Placar>(this, "AddItem", async(obj, item) =>
            {
                var clas = ((await DataStore.GetItemsAsync(true)) ?? new Classificacao[0])
                           .OrderBy(a => a.Posicao)
                           .ToArray();


                var novoPlacar = item as Placar;

                var clasJA = clas.FirstOrDefault(a => a.Jogador == novoPlacar.JogadorA.Nome);
                var clasJB = clas.FirstOrDefault(a => a.Jogador == novoPlacar.JogadorB.Nome);

                //if (novoPlacar.Regra.Nome == RegrasBusiness.AMISTOSO)
                //{
                //    await PlacarDataStore.AddItemAsync(novoPlacar);
                //    return;
                //}

                var ultimaPosicao = clas[clas.Length - 1].Posicao;

                novoPlacar.PosicaoA    = (clasJA?.Posicao) ?? (++ultimaPosicao);
                novoPlacar.PosicaoAntA = (clasJA?.PosicaoAnterior);
                novoPlacar.PosicaoB    = (clasJB?.Posicao) ?? (++ultimaPosicao);
                novoPlacar.PosicaoAntB = (clasJB?.PosicaoAnterior);

                await PlacarDataStore.AddItemAsync(novoPlacar);

                RecalcularClassificacaoAsync(null);
            });
        }
예제 #2
0
        private async void IncluirPlacar(NewItemPage source, Placar placar)
        {
            var clas = ((await DataStore.GetItemsAsync(true)) ?? new Classificacao[0])
                       .OrderBy(a => a.Posicao)
                       .ToArray();

            var novoPlacar = placar as Placar;

            var clasJA = clas.FirstOrDefault(a => a.Jogador == novoPlacar.JogadorA.Nome);
            var clasJB = clas.FirstOrDefault(a => a.Jogador == novoPlacar.JogadorB.Nome);

            var ultimaPosicao = clas[clas.Length - 1].Posicao;

            novoPlacar.PosicaoA    = (clasJA?.Posicao) ?? (++ultimaPosicao);
            novoPlacar.PosicaoAntA = (clasJA?.PosicaoAnterior);
            novoPlacar.PosicaoB    = (clasJB?.Posicao) ?? (++ultimaPosicao);
            novoPlacar.PosicaoAntB = (clasJB?.PosicaoAnterior);

            await PlacarDataStore.AddItemAsync(novoPlacar);

            RecalcularClassificacaoAsync(null);
        }
예제 #3
0
        public async void RecalcularClassificacaoAsync(Classificacao[] clas = null)
        {
            if (clas == null)
            {
                clas = (await ClassificacaoInicialStore.GetItemsAsync())
                       .Select(a => a.Clone())
                       .OrderBy(a => a.Posicao)
                       .ToArray();
            }

            var placares = (await PlacarDataStore.GetItemsAsync(true)).ToArray();

            var busi     = new ClassificacaoBusiness();
            var classifs = busi.RecalcularClassificacao(clas, placares);

            var novaLista = classifs.Where(a => a.Excluir == false)
                            .OrderBy(a => a.Posicao)
                            .ToArray();

            await DataStore.SaveAll(classifs);

            await ExecuteLoadClassificacaoCommand(novaLista);
        }
예제 #4
0
        public async void RecalcularClassificacaoAsync(Classificacao[] clas = null)
        {
            var classifs = new List <Classificacao>();

            if (clas == null)
            {
                clas = (await ClassificacaoInicialStore.GetItemsAsync())
                       .Select(a => a.Clone())
                       .OrderBy(a => a.Posicao)
                       .ToArray();
            }

            classifs.AddRange(clas);

            var ultimaPosicao  = clas[clas.Length - 1].Posicao;
            var placares       = (await PlacarDataStore.GetItemsAsync(true)).ToArray();
            var dataMaisAntiga = clas.Select(a => a.Data).OrderBy(a => a).First();

            placares = placares.Where(a => a.Data >= dataMaisAntiga)
                       .OrderBy(a => a.DataPublicacao)
                       .ToArray();

            foreach (var placar in placares)
            {
                if (placar.JogadorAGols == null || placar.JogadorBGols == null)
                {
                    continue;
                }

                var clasJogadorA = GetClassificaoJogador(classifs, placar.JogadorA, ref ultimaPosicao);
                var clasJogadorB = GetClassificaoJogador(classifs, placar.JogadorB, ref ultimaPosicao);

                var golsA = placar.JogadorAGols ?? 0;
                var golsB = placar.JogadorBGols ?? 0;

                clasJogadorA.Alterado = true;
                clasJogadorB.Alterado = true;

                if (golsA == golsB)
                {
                    AtualizarEstatistica(clasJogadorA, 0, 1, 0, golsA, golsB);
                    AtualizarEstatistica(clasJogadorB, 0, 1, 0, golsB, golsA);
                    continue;
                }
                else if (golsA > golsB)
                {
                    AtualizarEstatistica(clasJogadorA, 1, 0, 0, golsA, golsB);
                    AtualizarEstatistica(clasJogadorB, 0, 0, 1, golsB, golsA);
                }
                else
                {
                    AtualizarEstatistica(clasJogadorA, 0, 0, 1, golsA, golsB);
                    AtualizarEstatistica(clasJogadorB, 1, 0, 0, golsB, golsA);
                }

                clasJogadorA.Posicao         = placar.PosicaoA;
                clasJogadorA.PosicaoAnterior = placar.PosicaoAntA;
                clasJogadorB.Posicao         = placar.PosicaoB;
                clasJogadorB.PosicaoAnterior = placar.PosicaoAntB;

                if (placar.JogadorAGols > placar.JogadorBGols)
                {
                    AtualizarPosicao(classifs, ultimaPosicao, clasJogadorA, clasJogadorB, placar.Regra);
                    continue;
                }
                else
                {
                    AtualizarPosicao(classifs, ultimaPosicao, clasJogadorB, clasJogadorA, placar.Regra);
                }
            }

            await SalvarAlteracoesAsync(classifs);
            await ExecuteLoadClassificacaoCommand(classifs.OrderBy(a => a.Posicao)
                                                  .ToArray());
        }