Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// @notice Have a pregnant Kitty give birth!
- /// @param _matronId A Kitty ready to give birth.
- /// @return The Kitty ID of the new kitten.
- /// @dev Looks at a given Kitty and, if pregnant and if the gestation period has passed,
- /// combines the genes of the two parents to create a new kitten. The new Kitty is assigned
- /// to the current owner of the matron. Upon successful completion, both the matron and the
- /// new kitten will be ready to breed again. Note that anyone can call this function (if they
- /// are willing to pay the gas!), but the new kitten always goes to the mother's owner.
- function giveBirth(uint256 _matronId)
- external
- whenNotPaused
- returns(uint256)
- {
- // Grab a reference to the matron in storage.
- Kitty storage matron = kitties[_matronId];
- // Check that the matron is a valid cat.
- require(matron.birthTime != 0);
- // Check that the matron is pregnant, and that its time has come!
- require(_isReadyToGiveBirth(matron));
- // Grab a reference to the sire in storage.
- uint256 sireId = matron.siringWithId;
- Kitty storage sire = kitties[sireId];
- // Determine the higher generation number of the two parents
- uint16 parentGen = matron.generation;
- if (sire.generation > matron.generation) {
- parentGen = sire.generation;
- }
- // Call the sooper-sekret gene mixing operation.
- uint256 childGenes = geneScience.mixGenes(matron.genes, sire.genes, matron.cooldownEndBlock - 1);
- // Make the new kitten!
- address owner = kittyIndexToOwner[_matronId];
- uint256 kittenId = _createKitty(_matronId, matron.siringWithId, parentGen + 1, childGenes, owner);
- // Clear the reference to sire from the matron (REQUIRED! Having siringWithId
- // set is what marks a matron as being pregnant.)
- delete matron.siringWithId;
- // Every time a kitty gives birth counter is decremented.
- pregnantKitties--;
- // Send the balance fee to the person who made birth happen.
- msg.sender.send(autoBirthFee);
- // return the new kitten's ID
- return kittenId;
- }
Add Comment
Please, Sign In to add comment