/**
  * {@inheritdoc}
  */
 public static function fromArray(array $values)
 {
     $message = new self();
     $values = array_merge(['type' => null, 'action_start_ms' => null, 'duration_ms' => null, 'energy_delta' => null, 'attacker_index' => null, 'target_index' => null, 'active_pokemon_id' => null, 'player_joined' => null, 'battle_results' => null, 'damage_windows_start_timestamp_ms' => null, 'damage_windows_end_timestamp_ms' => null, 'player_left' => null, 'target_pokemon_id' => null], $values);
     $message->setType($values['type']);
     $message->setActionStartMs($values['action_start_ms']);
     $message->setDurationMs($values['duration_ms']);
     $message->setEnergyDelta($values['energy_delta']);
     $message->setAttackerIndex($values['attacker_index']);
     $message->setTargetIndex($values['target_index']);
     $message->setActivePokemonId($values['active_pokemon_id']);
     $message->setPlayerJoined($values['player_joined']);
     $message->setBattleResults($values['battle_results']);
     $message->setDamageWindowsStartTimestampMs($values['damage_windows_start_timestamp_ms']);
     $message->setDamageWindowsEndTimestampMs($values['damage_windows_end_timestamp_ms']);
     $message->setPlayerLeft($values['player_left']);
     $message->setTargetPokemonId($values['target_pokemon_id']);
     return $message;
 }
 /**
  * {@inheritdoc}
  */
 public static function fromArray(array $values)
 {
     $message = new self();
     $values = array_merge(['movement_id' => null, 'animation_id' => null, 'pokemon_type' => null, 'power' => null, 'accuracy_chance' => null, 'critical_chance' => null, 'heal_scalar' => null, 'stamina_loss_scalar' => null, 'trainer_level_min' => null, 'trainer_level_max' => null, 'vfx_name' => null, 'duration_ms' => null, 'damage_window_start_ms' => null, 'damage_window_end_ms' => null, 'energy_delta' => null], $values);
     $message->setMovementId($values['movement_id']);
     $message->setAnimationId($values['animation_id']);
     $message->setPokemonType($values['pokemon_type']);
     $message->setPower($values['power']);
     $message->setAccuracyChance($values['accuracy_chance']);
     $message->setCriticalChance($values['critical_chance']);
     $message->setHealScalar($values['heal_scalar']);
     $message->setStaminaLossScalar($values['stamina_loss_scalar']);
     $message->setTrainerLevelMin($values['trainer_level_min']);
     $message->setTrainerLevelMax($values['trainer_level_max']);
     $message->setVfxName($values['vfx_name']);
     $message->setDurationMs($values['duration_ms']);
     $message->setDamageWindowStartMs($values['damage_window_start_ms']);
     $message->setDamageWindowEndMs($values['damage_window_end_ms']);
     $message->setEnergyDelta($values['energy_delta']);
     return $message;
 }