protected function I_can_detect_way_of_payment(SkillPoint $skillPoint) { self::assertSame($skillPoint->getBackgroundSkillPoints() !== null, $skillPoint->isPaidByFirstLevelBackgroundSkillPoints()); self::assertSame($skillPoint->getFirstPaidOtherSkillPoint() !== null && $skillPoint->getSecondPaidOtherSkillPoint() !== null, $skillPoint->isPaidByOtherSkillPoints()); self::assertSame(!$skillPoint->isPaidByFirstLevelBackgroundSkillPoints() && !$skillPoint->isPaidByOtherSkillPoints() && $skillPoint->getProfessionNextLevel() !== null, $skillPoint->isPaidByNextLevelPropertyIncrease()); self::assertSame(1, $skillPoint->isPaidByFirstLevelBackgroundSkillPoints() + $skillPoint->isPaidByNextLevelPropertyIncrease() + $skillPoint->isPaidByOtherSkillPoints()); }
private static function extractPaymentDetails(SkillPoint $skillPoint) { $propertyPayment = self::getPaymentsSkeleton(); $type = $skillPoint->getTypeName(); if ($skillPoint->isPaidByFirstLevelBackgroundSkillPoints()) { /** * There are limited first level background skill points, * * @see \DrdPlus\Person\Background\BackgroundSkillPoints * and @see \DrdPlus\Person\Background\Heritage * check their sum */ $propertyPayment['firstLevel'][$type]['spentFirstLevelSkillPoints'] += $skillPoint->getValue(); $propertyPayment['firstLevel'][$type]['backgroundSkillPoints'] = $skillPoint->getBackgroundSkillPoints(); return $propertyPayment; } else { if ($skillPoint->isPaidByOtherSkillPoints()) { $firstPaidOtherSkillPoint = self::extractPaymentDetails($skillPoint->getFirstPaidOtherSkillPoint()); $secondPaidOtherSkillPoint = self::extractPaymentDetails($skillPoint->getSecondPaidOtherSkillPoint()); // the other skill points have to be extracted to first level background skills, see upper return self::sumPayments([$firstPaidOtherSkillPoint, $secondPaidOtherSkillPoint]); } else { if ($skillPoint->isPaidByNextLevelPropertyIncrease()) { // for every skill point of this type has to exists level property increase $propertyPayment['nextLevels'][$type]['spentNextLevelsSkillPoints'] += $skillPoint->getValue(); $propertyPayment['nextLevels'][$type]['relatedProperties'] = $skillPoint->getRelatedProperties(); return $propertyPayment; } else { throw new Exceptions\UnknownPaymentForSkillPoint('Unknown payment for skill point ' . get_class($skillPoint)); } } } }