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;
}
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"));
}
Aggregations