/**
  * {@inheritdoc}
  */
 public static function fromArray(array $values)
 {
     $message = new self();
     $values = array_merge(['pokemon_id' => null, 'model_scale' => null, 'type' => null, 'type_2' => null, 'camera' => null, 'encounter' => null, 'stats' => null, 'quick_moves' => [], 'cinematic_moves' => [], 'animation_time' => [], 'evolution_ids' => [], 'evolution_pips' => null, 'rarity' => null, 'pokedex_height_m' => null, 'pokedex_weight_kg' => null, 'parent_pokemon_id' => null, 'height_std_dev' => null, 'weight_std_dev' => null, 'km_distance_to_hatch' => null, 'family_id' => null, 'candy_to_evolve' => null, 'km_buddy_distance' => null, 'buddy_size' => null, 'model_height' => null], $values);
     $message->setPokemonId($values['pokemon_id']);
     $message->setModelScale($values['model_scale']);
     $message->setType($values['type']);
     $message->setType2($values['type_2']);
     $message->setCamera($values['camera']);
     $message->setEncounter($values['encounter']);
     $message->setStats($values['stats']);
     $message->setEvolutionPips($values['evolution_pips']);
     $message->setRarity($values['rarity']);
     $message->setPokedexHeightM($values['pokedex_height_m']);
     $message->setPokedexWeightKg($values['pokedex_weight_kg']);
     $message->setParentPokemonId($values['parent_pokemon_id']);
     $message->setHeightStdDev($values['height_std_dev']);
     $message->setWeightStdDev($values['weight_std_dev']);
     $message->setKmDistanceToHatch($values['km_distance_to_hatch']);
     $message->setFamilyId($values['family_id']);
     $message->setCandyToEvolve($values['candy_to_evolve']);
     $message->setKmBuddyDistance($values['km_buddy_distance']);
     $message->setBuddySize($values['buddy_size']);
     $message->setModelHeight($values['model_height']);
     foreach ($values['quick_moves'] as $item) {
         $message->addQuickMoves($item);
     }
     foreach ($values['cinematic_moves'] as $item) {
         $message->addCinematicMoves($item);
     }
     foreach ($values['animation_time'] as $item) {
         $message->addAnimationTime($item);
     }
     foreach ($values['evolution_ids'] as $item) {
         $message->addEvolutionIds($item);
     }
     return $message;
 }
 /**
  * {@inheritdoc}
  */
 public static function fromArray(array $values)
 {
     $message = new self();
     $values = array_merge(['template_id' => null, 'pokemon_settings' => null, 'item_settings' => null, 'move_settings' => null, 'move_sequence_settings' => null, 'type_effective' => null, 'badge_settings' => null, 'camera' => null, 'player_level' => null, 'gym_level' => null, 'battle_settings' => null, 'encounter_settings' => null, 'iap_item_display' => null, 'iap_settings' => null, 'pokemon_upgrades' => null, 'equipped_badges' => null, 'quest_settings' => null], $values);
     $message->setTemplateId($values['template_id']);
     $message->setPokemonSettings($values['pokemon_settings']);
     $message->setItemSettings($values['item_settings']);
     $message->setMoveSettings($values['move_settings']);
     $message->setMoveSequenceSettings($values['move_sequence_settings']);
     $message->setTypeEffective($values['type_effective']);
     $message->setBadgeSettings($values['badge_settings']);
     $message->setCamera($values['camera']);
     $message->setPlayerLevel($values['player_level']);
     $message->setGymLevel($values['gym_level']);
     $message->setBattleSettings($values['battle_settings']);
     $message->setEncounterSettings($values['encounter_settings']);
     $message->setIapItemDisplay($values['iap_item_display']);
     $message->setIapSettings($values['iap_settings']);
     $message->setPokemonUpgrades($values['pokemon_upgrades']);
     $message->setEquippedBadges($values['equipped_badges']);
     $message->setQuestSettings($values['quest_settings']);
     return $message;
 }