/**
  * @test
  * @dataProvider provideFallAndExpectedWounds
  * @param $activity
  * @param $jumping
  * @param $expectedWoundsBonus
  */
 public function I_can_get_wounds_on_fall_from_horse($activity, $jumping, $expectedWoundsBonus)
 {
     $woundsTable = new WoundsTable();
     self::assertEquals(new WoundsBonus($expectedWoundsBonus, $woundsTable), (new WoundsOnFallFromHorseTable())->getWoundsOnFallFromHorse(RidingAnimalMovementCode::getIt($activity), $jumping, $woundsTable));
 }
 /**
  * @test
  * @dataProvider provideMovementAndExpectedRide
  * @param string $movement
  * @param bool $jumping
  * @param int $expectedRideValue
  */
 public function I_can_get_ride_for_any_move($movement, $jumping, $expectedRideValue)
 {
     $ridesTable = new RidesTable();
     self::assertEquals(new Ride($expectedRideValue), $ridesTable->getRideFor(RidingAnimalMovementCode::getIt($movement), $jumping));
 }
 /**
  * @return Time
  */
 public function getPeriodForPointOfFatigueOnGallop()
 {
     /** @noinspection ExceptionsAnnotatingAndHandlingInspection */
     return $this->getPeriodForPointOfFatigue(RidingAnimalMovementCode::getIt(RidingAnimalMovementCode::GALLOP));
 }
 /**
  * @param RidingAnimalMovementCode $ridingAnimalMovementCode
  * @param bool $jumping
  * @param WoundsTable $woundsTable
  * @return WoundsBonus
  */
 public function getWoundsOnFallFromHorse(RidingAnimalMovementCode $ridingAnimalMovementCode, $jumping, WoundsTable $woundsTable)
 {
     /** @noinspection ExceptionsAnnotatingAndHandlingInspection */
     return new WoundsBonus($this->getValue([$ridingAnimalMovementCode->getValue()], self::WOUNDS_MODIFICATION) + ($jumping ? $this->getValue([RidingAnimalMovementCode::JUMPING], self::WOUNDS_MODIFICATION) : 0), $woundsTable);
 }
 /**
  * @param RidingAnimalMovementCode $ridingAnimalMovementCode
  * @param bool $jumping
  * @return Ride
  */
 public function getRideFor(RidingAnimalMovementCode $ridingAnimalMovementCode, $jumping)
 {
     /** @noinspection ExceptionsAnnotatingAndHandlingInspection */
     return new Ride($this->getValue([$ridingAnimalMovementCode->getValue()], self::RIDE) + ($jumping ? $this->getValue([RidingAnimalMovementCode::JUMPING], self::RIDE) : 0));
 }
 public static function registerSelf()
 {
     parent::registerSelf();
     // ARMAMENTS
     static::registerCodeAsSubType(ArrowCode::getIt(ArrowCode::BASIC_ARROW));
     static::registerCodeAsSubType(BodyArmorCode::getIt(BodyArmorCode::CHAINMAIL_ARMOR));
     static::registerCodeAsSubType(DartCode::getIt(DartCode::BASIC_DART));
     static::registerCodeAsSubType(HelmCode::getIt(HelmCode::BARREL_HELM));
     static::registerCodeAsSubType(MeleeWeaponCode::getIt(MeleeWeaponCode::HAND));
     static::registerCodeAsSubType(RangedWeaponCode::getIt(RangedWeaponCode::HEAVY_CROSSBOW));
     static::registerCodeAsSubType(ShieldCode::getIt(ShieldCode::BUCKLER));
     static::registerCodeAsSubType(SlingStoneCode::getIt(SlingStoneCode::SLING_STONE_HEAVIER));
     static::registerCodeAsSubType(WeaponCategoryCode::getIt(WeaponCategoryCode::ARROW));
     // BODY
     static::registerCodeAsSubType(ActivityAffectingHealingCode::getIt(ActivityAffectingHealingCode::LIGHT_ACTIVITY));
     static::registerCodeAsSubType(AfflictionByWoundDomainCode::getIt(AfflictionByWoundDomainCode::PHYSICAL));
     static::registerCodeAsSubType(ConditionsAffectingHealingCode::getIt(ConditionsAffectingHealingCode::BAD_CONDITIONS));
     static::registerCodeAsSubType(RestConditionsCode::getIt(RestConditionsCode::FOUL_CONDITIONS));
     static::registerCodeAsSubType(WoundsOriginCode::getIt(WoundsOriginCode::ELEMENTAL));
     static::registerCodeAsSubType(WoundTypeCode::getIt(WoundTypeCode::CRUSH));
     // COMBAT ACTIONS
     static::registerCodeAsSubType(CombatActionCode::getIt(CombatActionCode::ATTACKED_FROM_BEHIND));
     static::registerCodeAsSubType(MeleeCombatActionCode::getIt(MeleeCombatActionCode::COVER_OF_ALLY));
     static::registerCodeAsSubType(RangedCombatActionCode::getIt(RangedCombatActionCode::AIMED_SHOT));
     // ENVIRONMENT
     static::registerCodeAsSubType(LightConditionsCode::getIt(LightConditionsCode::STRONG_DAYLIGHT));
     static::registerCodeAsSubType(LightSourceCode::getIt(LightSourceCode::BALEFIRE));
     static::registerCodeAsSubType(LightSourceEnvironmentCode::getIt(LightSourceEnvironmentCode::MIRROR_BEHIND_LIGHT_SOURCE));
     static::registerCodeAsSubType(TerrainCode::getIt(TerrainCode::DESERT));
     // SKILLS
     static::registerCodeAsSubType(CombinedSkillCode::getIt(CombinedSkillCode::BIG_HANDWORK));
     static::registerCodeAsSubType(PhysicalSkillCode::getIt(PhysicalSkillCode::ATHLETICS));
     static::registerCodeAsSubType(PsychicalSkillCode::getIt(PsychicalSkillCode::ASTRONOMY));
     static::registerCodeAsSubType(SkillTypeCode::getIt(SkillTypeCode::COMBINED));
     // OTHERS
     static::registerCodeAsSubType(ElementCode::getIt(ElementCode::AIR));
     static::registerCodeAsSubType(GenderCode::getIt(GenderCode::FEMALE));
     static::registerCodeAsSubType(ItemHoldingCode::getIt(ItemHoldingCode::MAIN_HAND));
     static::registerCodeAsSubType(MovementTypeCode::getIt(MovementTypeCode::RUN));
     static::registerCodeAsSubType(ProfessionCode::getIt(ProfessionCode::COMMONER));
     static::registerCodeAsSubType(PropertyCode::getIt(PropertyCode::AGE));
     static::registerCodeAsSubType(RaceCode::getIt(RaceCode::DWARF));
     static::registerCodeAsSubType(RidingAnimalCode::getIt(RidingAnimalCode::BULL));
     static::registerCodeAsSubType(RidingAnimalMovementCode::getIt(RidingAnimalMovementCode::CANTER));
     static::registerCodeAsSubType(RidingAnimalPropertyCode::getIt(RidingAnimalPropertyCode::DEFIANCE));
     static::registerCodeAsSubType(SubRaceCode::getIt(SubRaceCode::COMMON));
     static::registerCodeAsSubType(TimeCode::getIt(TimeCode::DAY));
 }
 /**
  * @test
  * @dataProvider provideMovementAndExpectedPeriodOfFatigue
  * @param $movementCode
  * @param Time $period
  */
 public function I_can_get_period_of_point_of_fatigue($movementCode, Time $period)
 {
     self::assertEquals($period, (new RidingAnimalMovementTypesTable($speedTable = new SpeedTable(), new MovementTypesTable($speedTable, new TimeTable())))->getPeriodForPointOfFatigue(RidingAnimalMovementCode::getIt($movementCode)));
 }