public static IChromosome inheritChromosome(Random rand, IChromosome parent1, IChromosome parent2) { IAllele choice1; if (rand.nextBoolean()) { choice1 = parent1.getPrimaryAllele(); } else { choice1 = parent1.getSecondaryAllele(); } IAllele choice2; if (rand.nextBoolean()) { choice2 = parent2.getPrimaryAllele(); } else { choice2 = parent2.getSecondaryAllele(); } if (rand.nextBoolean()) { return new Chromosome(choice1, choice2); } else { return new Chromosome(choice2, choice1); } }
public static IAllele getAllele(ItemStack itemStack, IChromosomeType type, boolean active) { IAllele allele = getSpeciesDirectly(itemStack, type, active); if (allele == null) { IChromosome chromosome = getChromosome(itemStack, type, type.getSpeciesRoot()); allele = active ? chromosome.getActiveAllele() : chromosome.getInactiveAllele(); } return allele; }
@Override public IAlleleFlowerSpecies getPrimary() { return (IAlleleFlowerSpecies) getChromosomes()[EnumFlowerChromosome.SPECIES.ordinal()].getPrimaryAllele(); }
@Override public IAlleleFlowerSpecies getSecondary() { return (IAlleleFlowerSpecies) getChromosomes()[EnumFlowerChromosome.SPECIES.ordinal()].getSecondaryAllele(); }
protected static IAllele getActiveAllele(ItemStack itemStack, IChromosomeType chromosomeType, ISpeciesRoot speciesRoot) { IChromosome chromosome = getChromosome(itemStack, chromosomeType, speciesRoot); return chromosome.getActiveAllele(); }
@Override public IAllele getInactiveAllele(IChromosomeType chromosomeType) { return chromosomes[chromosomeType.ordinal()].getInactiveAllele(); }
@Override public NBTTagCompound writeToNBT(NBTTagCompound nbttagcompound) { NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i < chromosomes.length; i++) { if (chromosomes[i] != null) { NBTTagCompound nbttagcompound1 = new NBTTagCompound(); nbttagcompound1.setByte(SLOT_TAG, (byte) i); chromosomes[i].writeToNBT(nbttagcompound1); nbttaglist.appendTag(nbttagcompound1); } } nbttagcompound.setTag("Chromosomes", nbttaglist); return nbttagcompound; }
@Override public IAllele getActiveAllele(IChromosomeType chromosomeType) { return chromosomes[chromosomeType.ordinal()].getActiveAllele(); }
@Override public boolean isGeneticEqual(IGenome other) { IChromosome[] genetics = other.getChromosomes(); if (chromosomes.length != genetics.length) { return false; } for (int i = 0; i < chromosomes.length; i++) { IChromosome chromosome = chromosomes[i]; IChromosome otherChromosome = genetics[i]; if (chromosome == null && otherChromosome == null) { continue; } if (chromosome == null || otherChromosome == null) { return false; } if (!chromosome.getPrimaryAllele().getUID().equals(otherChromosome.getPrimaryAllele().getUID())) { return false; } if (!chromosome.getSecondaryAllele().getUID().equals(otherChromosome.getSecondaryAllele().getUID())) { return false; } } return true; }
@Override public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) { if (this.isInCreativeTab(tab)) { for (ISpeciesRoot root : AlleleManager.alleleRegistry.getSpeciesRoot().values()) { for (IIndividual template : root.getIndividualTemplates()) { if (template.getGenome().getPrimary().isSecret()) { continue; } IGeneItem geneItem = new GeneArrayItem(); for (IChromosomeType type : root.getKaryotype()) { IChromosome chromosome = template.getGenome().getChromosomes()[type.ordinal()]; if (chromosome != null) { IAllele active = chromosome.getActiveAllele(); geneItem.addGene(new Gene(active, type, root)); } } ItemStack array = new ItemStack(this); geneItem.writeToItem(array); items.add(array); } } } }
@Nullable private static IChromosome[] mutateSpecies(World world, IButterflyNursery nursery, IGenome genomeOne, IGenome genomeTwo) { IChromosome[] parent1 = genomeOne.getChromosomes(); IChromosome[] parent2 = genomeTwo.getChromosomes(); IGenome genome0; IGenome genome1; IAllele allele0; IAllele allele1; if (rand.nextBoolean()) { allele0 = parent1[EnumButterflyChromosome.SPECIES.ordinal()].getPrimaryAllele(); allele1 = parent2[EnumButterflyChromosome.SPECIES.ordinal()].getSecondaryAllele(); genome0 = genomeOne; genome1 = genomeTwo; } else { allele0 = parent2[EnumButterflyChromosome.SPECIES.ordinal()].getPrimaryAllele(); allele1 = parent1[EnumButterflyChromosome.SPECIES.ordinal()].getSecondaryAllele(); genome0 = genomeTwo; genome1 = genomeOne; } for (IButterflyMutation mutation : ButterflyManager.butterflyRoot.getMutations(true)) { float chance = mutation.getChance(world, nursery, allele0, allele1, genome0, genome1); if (chance > rand.nextFloat() * 100) { return ButterflyManager.butterflyRoot.templateAsChromosomes(mutation.getTemplate()); } } return null; }
private boolean calculateMatchesTemplateGenome() { IAlleleTreeSpecies primary = getPrimary(); IAllele[] template = getSpeciesRoot().getTemplate(primary); IChromosome[] chromosomes = getChromosomes(); for (int i = 0; i < chromosomes.length; i++) { IChromosome chromosome = chromosomes[i]; String templateUid = template[i].getUID(); IAllele primaryAllele = chromosome.getPrimaryAllele(); if (!primaryAllele.getUID().equals(templateUid)) { return false; } IAllele secondaryAllele = chromosome.getSecondaryAllele(); if (!secondaryAllele.getUID().equals(templateUid)) { return false; } } return true; } }
allele0 = (IAlleleTreeSpecies) parent1[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele(); allele1 = (IAlleleTreeSpecies) parent2[EnumTreeChromosome.SPECIES.ordinal()].getSecondaryAllele(); allele0 = (IAlleleTreeSpecies) parent2[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele(); allele1 = (IAlleleTreeSpecies) parent1[EnumTreeChromosome.SPECIES.ordinal()].getSecondaryAllele();
allele0 = (IAlleleBeeSpecies) parent1[EnumBeeChromosome.SPECIES.ordinal()].getPrimaryAllele(); allele1 = (IAlleleBeeSpecies) parent2[EnumBeeChromosome.SPECIES.ordinal()].getSecondaryAllele(); allele0 = (IAlleleBeeSpecies) parent2[EnumBeeChromosome.SPECIES.ordinal()].getPrimaryAllele(); allele1 = (IAlleleBeeSpecies) parent1[EnumBeeChromosome.SPECIES.ordinal()].getSecondaryAllele();
IAllele primary = chromosome.getPrimaryAllele(); if (primary == null) { String message = String.format("Tried to create a genome for '%s' from an invalid chromosome template. " + IAllele secondary = chromosome.getSecondaryAllele(); if (secondary == null) { String message = String.format("Tried to create a genome for '%s' from an invalid chromosome template. " +
IFlowerGenome genome2; if (world.rand.nextBoolean()) { alleleFirst = (IAlleleFlowerSpecies) parentFirst[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele(); alleleSecond = (IAlleleFlowerSpecies) parentSecond[EnumTreeChromosome.SPECIES.ordinal()].getSecondaryAllele(); genome0 = genomeFirst; genome2 = genomeSecond; } else { alleleFirst = (IAlleleFlowerSpecies) parentSecond[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele(); alleleSecond = (IAlleleFlowerSpecies) parentFirst[EnumTreeChromosome.SPECIES.ordinal()].getSecondaryAllele(); genome0 = genomeSecond; genome2 = genomeFirst;
primaryAlleles[i] = gene.getAllele(); } else { primaryAlleles[i] = chromosome.getPrimaryAllele(); secondaryAlleles[i] = chromosome.getSecondaryAllele();