/** * @test */ public function I_can_create_it_for_range_weapon() { $maximalRange = MaximalRange::createForRangedWeapon($this->createEncounterRange(123)); self::assertInstanceOf(MaximalRange::class, $maximalRange); self::assertInstanceOf(CombatGameCharacteristic::class, $maximalRange); self::assertSame(135, $maximalRange->getValue(), 'Value should be increased by twelve'); }
/** * Ranged weapons can be used for indirect shooting and those have much longer maximal and still somehow * controllable * (more or less - depends on weapon) range. * Others have their maximal (and still controllable) range same as encounter range. * See PPH page 104 left column. * * @param WeaponlikeCode $weaponlikeCode * @param Strength $currentStrength * @param Speed $currentSpeed * @return MaximalRange * @throws CanNotUseWeaponBecauseOfMissingStrength * @throws UnknownArmament * @throws UnknownRangedWeapon * @throws UnknownBow */ public function getMaximalRangeWithWeaponlike(WeaponlikeCode $weaponlikeCode, Strength $currentStrength, Speed $currentSpeed) { $encounterRange = $this->getEncounterRangeWithWeaponlike($weaponlikeCode, $currentStrength, $currentSpeed); if ($weaponlikeCode->isMelee()) { /** @noinspection ExceptionsAnnotatingAndHandlingInspection */ return MaximalRange::createForMeleeWeapon($encounterRange); // that is without change and that is zero } assert($weaponlikeCode->isRanged()); return MaximalRange::createForRangedWeapon($encounterRange); }
/** * @test * @dataProvider provideWeaponsForRangeEncounter * @param RangedWeaponCode $rangedWeaponCode * @param Tables $tables * @param int $strengthValue * @param int $speedValue * @param int $expectedEncounterRange */ public function I_can_get_maximal_range_with_ranged_weapon(RangedWeaponCode $rangedWeaponCode, Tables $tables, $strengthValue, $speedValue, $expectedEncounterRange) { $maximalRange = (new Armourer($tables))->getMaximalRangeWithWeaponlike($rangedWeaponCode, Strength::getIt($strengthValue), $this->createSpeed($speedValue)); self::assertInstanceOf(MaximalRange::class, $maximalRange); self::assertSame(MaximalRange::createForRangedWeapon(new EncounterRange($expectedEncounterRange))->getValue(), $maximalRange->getValue()); }