public Monster Breed(Monster other) { float rand = Random.Range(0.0f, 1.0f); if (rand <= SEXUAL_REPRO_CHANCE) { Dictionary <MonsterTreeNode, int> parent1Map; Dictionary <MonsterTreeNode, int> parent2Map; MonsterTree childTree = this.tree.Breed(other.tree, out parent1Map, out parent2Map); InstructionSet remappedSet1 = RemapInstructionSet(this, childTree, parent1Map); InstructionSet remappedSet2 = RemapInstructionSet(other, childTree, parent2Map); InstructionSet childSet = remappedSet1.Breed(remappedSet2); return(new Monster(childTree, childSet)); } else { return(Asexual()); } }