/** * @return Level */ public function getBonus() { return $this->experiencesTable->toLevel($this); }
/** * Summary of experiences, needed to achieve current level * * @return Experiences */ public function getTotalExperiences() { return $this->experiencesTable->toTotalExperiences($this); }
private function checkLevelsAgainstExperiences(ProfessionLevels $professionLevels, Memories $memories, ExperiencesTable $experiencesTable) { $highestLevelRank = $professionLevels->getCurrentLevel()->getLevelRank(); $requiredExperiences = $experiencesTable->toTotalExperiences(new LevelBonus($highestLevelRank->getValue(), $experiencesTable)); $availableExperiences = $memories->getExperiences($experiencesTable); if ($availableExperiences->getValue() < $requiredExperiences->getValue()) { throw new Exceptions\InsufficientExperiences("Given level {$highestLevelRank} needs at least {$requiredExperiences} experiences, got only {$availableExperiences}"); } }
/** * @test */ public function I_can_create_first_level_from_max_experiences_for_it_but_get_zero_back() { $experiencesTable = new ExperiencesTable(new WoundsTable()); $experiencesForFirstLevel = new Experiences($experiencesValue = 21, $experiencesTable); $levelOfMainProfession = $experiencesTable->toTotalLevel($experiencesForFirstLevel); self::assertSame(1, $levelOfMainProfession->getValue()); self::assertSame(0, $levelOfMainProfession->getExperiences()->getValue()); self::assertSame(0, $levelOfMainProfession->getTotalExperiences()->getValue()); $minimalExperiencesForSecondLevel = new Experiences($experiencesValue + 2, $experiencesTable); $shouldBeSecondLevel = $minimalExperiencesForSecondLevel->getLevel(); self::assertSame(2, $shouldBeSecondLevel->getValue()); self::assertSame($experiencesValue + 1, $shouldBeSecondLevel->getExperiences()->getValue()); self::assertSame($experiencesValue + 1, $shouldBeSecondLevel->getTotalExperiences()->getValue()); }