/** * @param $person1 Person * @param $person2 Person * @return Person */ public static function crossover($person1, $person2) { $child = new Person(); if (Algorithm::hasMutation()) { $child->setEyesColor(new EyesColor(EyesColor::MARK_BLUE)); $child->setHairColor(new HairColor(HairColor::MARK_BLONDE)); $child->setSkinColor(new SkinColor(0)); $child->setIsMutant(true); } else { $child->setEyesColor(Algorithm::getDominant($person1->getEyesColor(), $person2->getEyesColor())); $child->setHairColor(Algorithm::getDominant($person1->getHairColor(), $person2->getHairColor())); $child->setSkinColor(new SkinColor(floatval(($person1->getSkinColor()->getValue() + $person2->getSkinColor()->getValue()) / 2.0))); } $child->setParents([$person1->getId(), $person2->getId()]); return $child; }