/**
  * @param MovementTypesTable $movementTypesTable
  * @param string $movementTypeCode
  * @param SpeedTable $speedTable
  * @param string $terrainCode
  * @param TerrainDifficultyPercents $terrainDifficultyPercents
  * @param ImpassibilityOfTerrainTable $impassibilityOfTerrainTable
  * @return SpeedBonus
  * @throws \DrdPlus\Tables\Body\MovementTypes\Exceptions\UnknownMovementType
  * @throws \DrdPlus\Tables\Environments\Exceptions\UnknownTerrainCode
  * @throws \DrdPlus\Tables\Environments\Exceptions\InvalidTerrainCodeFormat
  */
 public function getCurrentSpeedBonus(MovementTypesTable $movementTypesTable, $movementTypeCode, SpeedTable $speedTable, $terrainCode, TerrainDifficultyPercents $terrainDifficultyPercents, ImpassibilityOfTerrainTable $impassibilityOfTerrainTable)
 {
     $movementTypeBonus = $movementTypesTable->getSpeedBonus($movementTypeCode);
     $terrainMalus = $impassibilityOfTerrainTable->getSpeedMalusOnTerrain($terrainCode, $speedTable, $terrainDifficultyPercents);
     /** @noinspection ExceptionsAnnotatingAndHandlingInspection */
     return new SpeedBonus($this->getValue() + $movementTypeBonus->getValue() + $terrainMalus->getValue(), $speedTable);
 }
 /**
  * @test
  * @expectedException \DrdPlus\Tables\Body\MovementTypes\Exceptions\UnknownMovementType
  * @expectedExceptionMessageRegExp ~moonwalk~
  */
 public function I_can_not_get_movement_bonus_for_unknown_type()
 {
     $movementTypesTable = new MovementTypesTable($this->speedTable, $this->timeTable);
     /** @noinspection ExceptionsAnnotatingAndHandlingInspection */
     $movementTypesTable->getSpeedBonus('moonwalk');
 }