/** * @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 */ public function I_can_get_maximal_range_same_as_encounter_for_melee_weapon() { $armourer = new Armourer($this->createTables()); foreach ($this->getMeleeWeaponlikeGroups() as $meleeWeaponlikeGroup) { $maximalRange = $armourer->getMaximalRangeWithWeaponlike($this->createMeleeWeaponlikeCode('foo', $meleeWeaponlikeGroup), $this->createStrength(), $this->createSpeed()); self::assertInstanceOf(MaximalRange::class, $maximalRange); self::assertSame(MaximalRange::createForMeleeWeapon(new EncounterRange(0))->getValue(), $maximalRange->getValue()); } }