Search in sources :

Example 1 with IFlowerColor

use of binnie.botany.api.genetics.IFlowerColor 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)

Example 2 with IFlowerColor

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

the class WindowBotanistDatabase method addTabs.

@Override
@SideOnly(Side.CLIENT)
protected void addTabs() {
    new PageSpeciesOverview(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "species.overview"));
    new PageSpeciesFlowerGenome(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "genome.title"));
    new PageSpeciesClassification(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "species.classification"));
    new PageSpeciesResultant(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "species.resultant"));
    new PageSpeciesMutations(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "species.further"));
    new PageBranchOverview(getInfoPages(Mode.BRANCHES), new DatabaseTab(Botany.instance, "branches.overview"));
    new PageBranchSpecies(getInfoPages(Mode.BRANCHES), new DatabaseTab(Botany.instance, "branches.species"));
    createMode(FlowerMode.Color, new ModeWidgets(FlowerMode.Color, this, (area, modePage) -> {
        FlowerColorControlListBox listBox = new FlowerColorControlListBox(modePage, area);
        List<IFlowerColor> colors = Arrays.stream(EnumFlowerColor.values()).map(EnumFlowerColor::getFlowerColorAllele).collect(Collectors.toList());
        listBox.setOptions(colors);
        return listBox;
    }));
    new PageColorMixResultant(getInfoPages(FlowerMode.Color), new DatabaseTab(Botany.instance, "color.resultant"));
    new PageColorMix(getInfoPages(FlowerMode.Color), new DatabaseTab(Botany.instance, "color.further"));
    new PageBreeder(getInfoPages(Mode.BREEDER), getUsername(), new DatabaseTab(Botany.instance, "breeder"));
}
Also used : Arrays(java.util.Arrays) IDatabaseMode(binnie.core.gui.database.IDatabaseMode) ControlListBox(binnie.core.gui.controls.listbox.ControlListBox) IFlowerColor(binnie.botany.api.genetics.IFlowerColor) Side(net.minecraftforge.fml.relauncher.Side) PageSpeciesOverview(binnie.core.gui.database.PageSpeciesOverview) PageSpeciesClassification(binnie.core.gui.database.PageSpeciesClassification) IWidget(binnie.core.api.gui.IWidget) SideOnly(net.minecraftforge.fml.relauncher.SideOnly) ModeWidgets(binnie.core.gui.database.ModeWidgets) IArea(binnie.core.api.gui.IArea) ModuleFlowers(binnie.botany.modules.ModuleFlowers) PageBranchSpecies(binnie.core.gui.database.PageBranchSpecies) DatabaseTab(binnie.core.gui.database.DatabaseTab) PageSpeciesResultant(binnie.core.gui.database.PageSpeciesResultant) Collectors(java.util.stream.Collectors) EnumFlowerColor(binnie.botany.api.genetics.EnumFlowerColor) Botany(binnie.botany.Botany) I18N(binnie.core.util.I18N) List(java.util.List) EntityPlayer(net.minecraft.entity.player.EntityPlayer) PageBranchOverview(binnie.core.gui.database.PageBranchOverview) PageBreeder(binnie.core.gui.database.PageBreeder) WindowAbstractDatabase(binnie.core.gui.database.WindowAbstractDatabase) ControlPage(binnie.core.gui.controls.page.ControlPage) PageSpeciesMutations(binnie.core.gui.database.PageSpeciesMutations) DatabaseConstants(binnie.core.gui.database.DatabaseConstants) Window(binnie.core.gui.minecraft.Window) PageBranchSpecies(binnie.core.gui.database.PageBranchSpecies) DatabaseTab(binnie.core.gui.database.DatabaseTab) PageSpeciesMutations(binnie.core.gui.database.PageSpeciesMutations) EnumFlowerColor(binnie.botany.api.genetics.EnumFlowerColor) PageSpeciesOverview(binnie.core.gui.database.PageSpeciesOverview) PageSpeciesClassification(binnie.core.gui.database.PageSpeciesClassification) List(java.util.List) PageSpeciesResultant(binnie.core.gui.database.PageSpeciesResultant) ModeWidgets(binnie.core.gui.database.ModeWidgets) PageBranchOverview(binnie.core.gui.database.PageBranchOverview) PageBreeder(binnie.core.gui.database.PageBreeder) SideOnly(net.minecraftforge.fml.relauncher.SideOnly)

Aggregations

IFlowerColor (binnie.botany.api.genetics.IFlowerColor)2 Botany (binnie.botany.Botany)1 EnumFlowerChromosome (binnie.botany.api.genetics.EnumFlowerChromosome)1 EnumFlowerColor (binnie.botany.api.genetics.EnumFlowerColor)1 IAlleleFlowerSpecies (binnie.botany.api.genetics.IAlleleFlowerSpecies)1 IColorMix (binnie.botany.api.genetics.IColorMix)1 IFlowerGenome (binnie.botany.api.genetics.IFlowerGenome)1 IFlowerMutation (binnie.botany.api.genetics.IFlowerMutation)1 ModuleFlowers (binnie.botany.modules.ModuleFlowers)1 IArea (binnie.core.api.gui.IArea)1 IWidget (binnie.core.api.gui.IWidget)1 ControlListBox (binnie.core.gui.controls.listbox.ControlListBox)1 ControlPage (binnie.core.gui.controls.page.ControlPage)1 DatabaseConstants (binnie.core.gui.database.DatabaseConstants)1 DatabaseTab (binnie.core.gui.database.DatabaseTab)1 IDatabaseMode (binnie.core.gui.database.IDatabaseMode)1 ModeWidgets (binnie.core.gui.database.ModeWidgets)1 PageBranchOverview (binnie.core.gui.database.PageBranchOverview)1 PageBranchSpecies (binnie.core.gui.database.PageBranchSpecies)1 PageBreeder (binnie.core.gui.database.PageBreeder)1