@Override public String getDisplayName() { return getGenome().getPrimary().getAlleleName(); }
@Override public boolean isPureBred(IChromosomeType chromosomeType) { return getGenome().getActiveAllele(chromosomeType).getUID().equals(getGenome().getInactiveAllele(chromosomeType).getUID()); } }
@Nonnull @Override public Map<Object, Object> getMeta(@Nonnull IGenome genome) { IChromosomeType[] types = genome.getSpeciesRoot().getKaryotype(); Map<String, Object> active = Maps.newHashMapWithExpectedSize(types.length); Map<String, Object> inactive = Maps.newHashMapWithExpectedSize(types.length); for (IChromosomeType type : types) { active.put(type.getName(), getAlleleMeta(genome.getActiveAllele(type))); inactive.put(type.getName(), getAlleleMeta(genome.getInactiveAllele(type))); } Map<Object, Object> out = Maps.newHashMap(); out.put("active", active); out.put("inactive", inactive); return out; }
private static int getTokenCount(IGenome genome) { IAlleleSpecies species1 = genome.getPrimary(); IAlleleSpecies species2 = genome.getSecondary(); int tokenCount = species1.getComplexity() + species2.getComplexity(); if (tokenCount % 2 != 0) { tokenCount = Math.round((float) tokenCount / 2) * 2; } if (tokenCount > TOKEN_COUNT_MAX) { tokenCount = TOKEN_COUNT_MAX; } else if (tokenCount < TOKEN_COUNT_MIN) { tokenCount = TOKEN_COUNT_MIN; } return tokenCount; }
@Override public void createElements(IDatabaseElement container, IIndividual individual, ItemStack itemStack) { IGenome genome = individual.getGenome(); ISpeciesRoot speciesRoot = genome.getSpeciesRoot(); IAlleleSpecies species = genome.getPrimary(); EntityPlayer player = Minecraft.getMinecraft().player; IBreedingTracker breedingTracker = speciesRoot.getBreedingTracker(player.world, player.getGameProfile()); IElementLayoutHelper groupHelper = container.layoutHelper((x, y) -> GuiElementFactory.INSTANCE.createHorizontal(x + 1, y, 16), 100, 0); Collection<? extends IMutation> mutations = getValidMutations(speciesRoot.getCombinations(species)); if (!mutations.isEmpty()) { container.label(Translator.translateToLocal("for.gui.database.mutations.further"), GuiElementAlignment.TOP_CENTER, GuiConstants.UNDERLINED_STYLE); mutations.forEach(mutation -> groupHelper.add(GuiElementFactory.INSTANCE.createMutation(0, 0, 50, 16, mutation, species, breedingTracker))); groupHelper.finish(true); } mutations = getValidMutations(speciesRoot.getResultantMutations(species)); if (mutations.isEmpty()) { return; } container.label(Translator.translateToLocal("for.gui.database.mutations.resultant"), GuiElementAlignment.TOP_CENTER, GuiConstants.UNDERLINED_STYLE); mutations.forEach(mutation -> groupHelper.add(GuiElementFactory.INSTANCE.createMutationResultant(0, 0, 50, 16, mutation, breedingTracker))); groupHelper.finish(true); }
public AnalystPageGrowth(IWidget parent, IArea area, IIndividual ind) { super(parent, area); setColor(3355443); int y = 4; IAlleleSpecies species = ind.getGenome().getPrimary(); new ControlTextCentered(this, y, TextFormatting.UNDERLINE + getTitle()).setColor(getColor()); y += 12; if (ind instanceof ITree) { ITree tree = (ITree) ind; int mat = tree.getGenome().getMaturationTime(); new ControlTextCentered(this, y, I18N.localise(AnalystConstants.GROWTH_KEY + ".mature")).setColor(getColor()); y += 12; new ControlTextCentered(this, y, TextFormatting.BOLD + TimeUtil.getTimeString(Math.round(1373.3999f * mat))).setColor(getColor()); y += 22; IBreedingSystem treeSystem = Binnie.GENETICS.getSystem(TreeManager.treeRoot); new ControlTextCentered(this, y, TextFormatting.ITALIC + I18N.localise(AnalystConstants.GROWTH_KEY + ".height") + ": " + treeSystem.getAlleleName(EnumTreeChromosome.HEIGHT, ind.getGenome().getActiveAllele(EnumTreeChromosome.HEIGHT))).setColor(getColor()); y += 12; new ControlTextCentered(this, y, TextFormatting.ITALIC + I18N.localise(AnalystConstants.GROWTH_KEY + ".girth") + ": " + treeSystem.getAlleleName(EnumTreeChromosome.GIRTH, ind.getGenome().getActiveAllele(EnumTreeChromosome.GIRTH))).setColor(getColor()); } }
@Override public ISpeciesRoot getSpeciesRoot(IIndividual individual) { return individual.getGenome().getSpeciesRoot(); }
@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); } } } }
@Override public void addToleranceLine(IChromosomeType chromosome) { IAllele allele = getGenome().getActiveAllele(chromosome); if (!(allele instanceof IAlleleTolerance)) { return; } addLine(" " + Translator.translateToLocal("for.gui.tolerance"), GuiElementFactory.INSTANCE.createToleranceInfo((IAlleleTolerance) allele)); }
@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; }
@Override public void registerBirth(IIndividual individual) { registerSpecies(individual.getGenome().getPrimary()); registerSpecies(individual.getGenome().getSecondary()); }
public void drawAnalyticsPageMutations(IIndividual individual) { textLayout.startPage(COLUMN_0, COLUMN_1, COLUMN_2); textLayout.drawLine(Translator.translateToLocal("for.gui.beealyzer.mutations") + ":", COLUMN_0); textLayout.newLine(); RenderHelper.enableGUIStandardItemLighting(); IGenome genome = individual.getGenome(); ISpeciesRoot speciesRoot = genome.getSpeciesRoot(); IAlleleSpecies species = genome.getPrimary(); int columnWidth = 50; int x = 0; EntityPlayer player = Minecraft.getMinecraft().player; IBreedingTracker breedingTracker = speciesRoot.getBreedingTracker(player.world, player.getGameProfile()); for (IMutation mutation : speciesRoot.getCombinations(species)) { if (breedingTracker.isDiscovered(mutation)) { drawMutationInfo(mutation, species, COLUMN_0 + x, breedingTracker); } else { // Do not display secret undiscovered mutations. if (mutation.isSecret()) { continue; } drawUnknownMutation(mutation, COLUMN_0 + x, breedingTracker); } x += columnWidth; if (x >= columnWidth * 4) { x = 0; textLayout.newLine(16); } } textLayout.endPage(); }
/** * Returns an IPollinatable that can be mated. This will convert vanilla leaves to Forestry leaves. */ @Nullable public static IPollinatable getOrCreatePollinatable(@Nullable GameProfile owner, World world, final BlockPos pos, boolean convertVanilla) { IPollinatable pollinatable = TileUtil.getTile(world, pos, IPollinatable.class); if (pollinatable == null && convertVanilla) { final IIndividual pollen = getPollen(world, pos); if (pollen != null) { ISpeciesRoot root = pollen.getGenome().getSpeciesRoot(); if (root instanceof ISpeciesRootPollinatable) { ISpeciesRootPollinatable rootPollinatable = (ISpeciesRootPollinatable) root; pollinatable = rootPollinatable.tryConvertToPollinatable(owner, world, pos, pollen); } } } return pollinatable; }
public ItemStack alter(final ItemStack stack, final ItemStack acc) { final Random rand = new Random(); final float effect = this.type.getEffect(acc); if (rand.nextFloat() > Math.abs(effect)) { return stack; } final IIndividual member = AlleleManager.alleleRegistry.getIndividual(stack); final IGenome genome = member.getGenome(); final IAlleleTolerance tolAllele = (IAlleleTolerance) genome.getActiveAllele(this.chromosomeType); final Tolerance tol = Tolerance.get(tolAllele.getValue()); final Tolerance newTol = Acclimatiser.alterTolerance(tol, effect); if (rand.nextFloat() > 1.0f / (-newTol.getBounds()[0] + newTol.getBounds()[1])) { return stack; } final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack); boolean setPrimary = rand.nextBoolean(); boolean setSecondary = !setPrimary; Gene gene = new Gene(newTol.getAllele(), this.chromosomeType, root); Splicer.setGene(gene, stack, setPrimary, setSecondary); return stack; }
@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; }
@SuppressWarnings("unchecked") private <A extends IAllele> void addAlleleRow(String chromosomeName, BiFunction<A, Boolean, String> toString, IChromosomeType chromosome, @Nullable Boolean dominant) { IGenome genome = getGenome(); A activeAllele = (A) genome.getActiveAllele(chromosome); A inactiveAllele = (A) genome.getInactiveAllele(chromosome); if (mode == DatabaseMode.BOTH) { addLine(chromosomeName, toString.apply(activeAllele, true), toString.apply(inactiveAllele, false), dominant != null ? dominant : activeAllele.isDominant(), dominant != null ? dominant : inactiveAllele.isDominant()); } else { boolean active = mode == DatabaseMode.ACTIVE; A allele = active ? activeAllele : inactiveAllele; addLine(chromosomeName, toString.apply(allele, active), dominant != null ? dominant : allele.isDominant()); } }
@Override public String getIdent() { return getGenome().getPrimary().getUID(); }
@Nonnull private ItemStack setItem(int slot, @Nonnull ItemStack itemStack) { if (slot < 0 || slot >= items.size()) { return ItemStack.EMPTY; } ItemStack prevStack = items.get(slot); if (!prevStack.isEmpty()) { this.primarySpeciesUids[slot] = null; this.secondarySpeciesUids[slot] = null; } items.set(slot, itemStack); ISpeciesRoot speciesRoot = AlleleManager.alleleRegistry.getSpeciesRoot(itemStack); if (speciesRoot != null) { IIndividual member = speciesRoot.getMember(itemStack); if (member != null) { IGenome genome = member.getGenome(); primarySpeciesUids[slot] = genome.getPrimary().getUID(); secondarySpeciesUids[slot] = genome.getSecondary().getUID(); } } return prevStack; }
new ControlTextCentered(this, y, TextFormatting.UNDERLINE + getTitle()).setColor(getColor()); y += 18; IBreedingSystem system = Binnie.GENETICS.getSystem(ind.getGenome().getSpeciesRoot()); List<IMutation> discovered = system.getDiscoveredMutations(Window.get(this).getWorld(), Window.get(this).getUsername()); IAlleleSpecies speciesCurrent = ind.getGenome().getPrimary(); Collection<IMutation> resultant = system.getResultantMutations(speciesCurrent); Collection<IMutation> further = system.getFurtherMutations(speciesCurrent);
public static int getGenesToUse(ItemStack serum, ItemStack target) { if (serum.isEmpty() || target.isEmpty()) { return 1; } final IIndividual ind = AlleleManager.alleleRegistry.getIndividual(target); final IGene[] genes = ((IItemSerum) serum.getItem()).getGenes(serum); if (ind.getGenome().getSpeciesRoot() != ((IItemSerum) serum.getItem()).getSpeciesRoot(serum)) { return 1; } int i = 0; for (final IGene gene : genes) { if (ind.getGenome().getActiveAllele(gene.getChromosome()) != gene.getAllele() || ind.getGenome().getInactiveAllele(gene.getChromosome()) != gene.getAllele()) { ++i; } } return (i < 1) ? 1 : i; }