Exemple #1
0
        /// <summary>
        /// Returns a Pokemon form entry for the given Pokemon form.
        /// </summary>
        protected override async Task <PokemonFormEntry> ConvertToEntry(PokemonForm pokemonForm)
        {
            var versionGroup = await VersionGroupService.Upsert(pokemonForm.VersionGroup);

            var types = await GetTypes(pokemonForm);

            var validity = await GetValidity(pokemonForm);

            return(new PokemonFormEntry
            {
                Key = pokemonForm.Id,
                Name = pokemonForm.Name,
                FormName = pokemonForm.FormName,
                IsMega = pokemonForm.IsMega,
                VersionGroup = new VersionGroup
                {
                    Id = versionGroup.VersionGroupId,
                    Name = versionGroup.Name
                },
                DisplayNames = pokemonForm.Names.Localise().ToList(),
                SpriteUrl = GetSpriteUrl(pokemonForm),
                ShinySpriteUrl = GetShinySpriteUrl(pokemonForm),
                Types = types.ToList(),
                Validity = validity.ToList()
            });
        }
        /// <summary>
        /// Returns this type's damage relations in the version group with the given ID.
        /// </summary>
        private async Task <TypeRelations> GetDamageRelations(Type type, int versionGroupId)
        {
            if (versionGroupId == await VersionGroupsService.GetNewestVersionGroupId())
            {
                return(type.DamageRelations);
            }

            var versionGroup = await VersionGroupsService.Upsert(versionGroupId);

            var pastDamageRelations = await GetPastDamageRelations(type, versionGroup.Generation);

            return(pastDamageRelations ?? type.DamageRelations);
        }
Exemple #3
0
        /// <summary>
        /// Returns the moves of the Pokemon with the given ID in the version group with the
        /// given ID from the data store.
        /// </summary>
        public async Task <PokemonMoveContext[]> GetPokemonMoves(int pokemonId, int versionGroupId)
        {
            var resource = await CacheService.Upsert(pokemonId);

            var versionGroup = await VersionGroupService.Upsert(versionGroupId);

            var relevantMoves = resource.Moves.Where(m =>
            {
                var versionGroupNames = m.VersionGroupDetails.Select(d => d.VersionGroup.Name);
                return(versionGroupNames.Contains(versionGroup.Name));
            }).ToArray();

            var moveEntries = await MoveService.UpsertMany(relevantMoves.Select(m => m.Move));

            var entryList = moveEntries.ToList();

            var moveContexts = new List <PokemonMoveContext>();

            for (int i = 0; i < entryList.Count; i++)
            {
                var moveEntry = entryList[i];
                var context   = PokemonMoveContext.From(moveEntry);

                var relevantDetails = relevantMoves[i].VersionGroupDetails
                                      .Where(d => d.VersionGroup.Name == versionGroup.Name);

                var methodList = new List <MoveLearnMethodEntry>();
                foreach (var detail in relevantDetails)
                {
                    var method = await MoveLearnMethodService.Upsert(detail.MoveLearnMethod);

                    if (method.Name == "level-up")
                    {
                        context.Level = detail.LevelLearnedAt;
                    }

                    if (method.Name == "machine")
                    {
                        var machineRefs = moveEntry.Machines.SingleOrDefault(m => m.Id == versionGroupId)?.Data;
                        if (machineRefs.Any())
                        {
                            var machineItems = new List <ItemEntry>();

                            foreach (var m in machineRefs)
                            {
                                var machineEntry = await MachineService.Upsert(m.Id);

                                var machineItem = await ItemService.Upsert(machineEntry.Item.Id);

                                machineItems.Add(machineItem);
                            }

                            context.LearnMachines = machineItems;
                        }
                    }

                    methodList.Add(method);
                }

                context.Methods = methodList;

                moveContexts.Add(context);
            }

            return(moveContexts.ToArray());
        }