/**
  * {@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;
 }