Created
March 25, 2018 00:13
-
-
Save dominiek/4ccf670a6b26c30f69b8dc72ab8dc541 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// @notice The minimum payment required to use breedWithAuto(). This fee goes towards | |
/// the gas cost paid by whatever calls giveBirth(), and can be dynamically updated by | |
/// the COO role as the gas price changes. | |
uint256 public autoBirthFee = 2 finney; | |
/// @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; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment