Search in sources :

Example 1 with IFlowerMutation

use of binnie.botany.api.genetics.IFlowerMutation in project Binnie by ForestryMC.

the class Flower method mutateSpecies.

private IChromosome[] mutateSpecies(World world, BlockPos pos, IFlowerGenome genomeFirst, IFlowerGenome genomeSecond) {
    IChromosome[] parentFirst = genomeFirst.getChromosomes();
    IChromosome[] parentSecond = genomeSecond.getChromosomes();
    IAlleleFlowerSpecies alleleFirst;
    IAlleleFlowerSpecies alleleSecond;
    IFlowerGenome genome0;
    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;
    }
    IFlowerColor colorFirst = genome0.getPrimaryColor();
    IFlowerColor colorSecond = genome2.getPrimaryColor();
    if (colorFirst != colorSecond) {
        for (IColorMix mutation : BotanyCore.getFlowerRoot().getColorMixes(true)) {
            if (mutation.isMutation(colorFirst, colorSecond) && world.rand.nextFloat() * 100.0f < mutation.getChance()) {
                parentFirst[EnumFlowerChromosome.PRIMARY.ordinal()] = new Chromosome(mutation.getResult().getAllele());
            }
        }
    }
    colorFirst = genome0.getSecondaryColor();
    colorSecond = genome2.getSecondaryColor();
    if (colorFirst != colorSecond) {
        for (IColorMix mutation : BotanyCore.getFlowerRoot().getColorMixes(true)) {
            if (mutation.isMutation(colorFirst, colorSecond) && world.rand.nextFloat() * 100.0f < mutation.getChance()) {
                parentFirst[EnumFlowerChromosome.SECONDARY.ordinal()] = new Chromosome(mutation.getResult().getAllele());
            }
        }
    }
    colorFirst = genome0.getStemColor();
    colorSecond = genome2.getStemColor();
    if (colorFirst != colorSecond) {
        for (IColorMix mutation : BotanyCore.getFlowerRoot().getColorMixes(true)) {
            if (mutation.isMutation(colorFirst, colorSecond) && world.rand.nextFloat() * 100.0f < mutation.getChance()) {
                parentFirst[EnumFlowerChromosome.STEM.ordinal()] = new Chromosome(mutation.getResult().getAllele());
            }
        }
    }
    IChromosome[] template = null;
    for (IFlowerMutation mutation2 : BotanyCore.getFlowerRoot().getMutations(true)) {
        float chance = mutation2.getChance(world, pos, alleleFirst, alleleSecond, genome0, genome2);
        if (chance > 0.0f && world.rand.nextFloat() * 100.0f < chance && template == null) {
            template = BotanyCore.getFlowerRoot().templateAsChromosomes(mutation2.getTemplate());
        }
    }
    if (template != null) {
        parentFirst = template;
    }
    return parentFirst;
}
Also used : IFlowerGenome(binnie.botany.api.genetics.IFlowerGenome) IColorMix(binnie.botany.api.genetics.IColorMix) IFlowerMutation(binnie.botany.api.genetics.IFlowerMutation) IChromosome(forestry.api.genetics.IChromosome) IFlowerColor(binnie.botany.api.genetics.IFlowerColor) Chromosome(forestry.core.genetics.Chromosome) IChromosome(forestry.api.genetics.IChromosome) EnumTreeChromosome(forestry.api.arboriculture.EnumTreeChromosome) EnumFlowerChromosome(binnie.botany.api.genetics.EnumFlowerChromosome) IAlleleFlowerSpecies(binnie.botany.api.genetics.IAlleleFlowerSpecies)

Aggregations

EnumFlowerChromosome (binnie.botany.api.genetics.EnumFlowerChromosome)1 IAlleleFlowerSpecies (binnie.botany.api.genetics.IAlleleFlowerSpecies)1 IColorMix (binnie.botany.api.genetics.IColorMix)1 IFlowerColor (binnie.botany.api.genetics.IFlowerColor)1 IFlowerGenome (binnie.botany.api.genetics.IFlowerGenome)1 IFlowerMutation (binnie.botany.api.genetics.IFlowerMutation)1 EnumTreeChromosome (forestry.api.arboriculture.EnumTreeChromosome)1 IChromosome (forestry.api.genetics.IChromosome)1 Chromosome (forestry.core.genetics.Chromosome)1