@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; }
@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 void addLine(String leftText, Function<Boolean, String> toText, IChromosomeType chromosome) { IGenome genome = getGenome(); IAllele activeAllele = genome.getActiveAllele(chromosome); IAllele inactiveAllele = genome.getInactiveAllele(chromosome); if (mode == DatabaseMode.BOTH) { addLine(leftText, toText.apply(true), toText.apply(false), activeAllele.isDominant(), inactiveAllele.isDominant()); } else { boolean active = mode == DatabaseMode.ACTIVE; IAllele allele = active ? activeAllele : inactiveAllele; addLine(leftText, toText.apply(active), allele.isDominant()); } }
@Override public boolean isPureBred(IChromosomeType chromosomeType) { return getGenome().getActiveAllele(chromosomeType).getUID().equals(getGenome().getInactiveAllele(chromosomeType).getUID()); } }
@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)); }
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; }
public boolean canAlter(final ItemStack stack, final ItemStack acclim) { 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 float effect = this.type.getEffect(acclim); return (effect > 0.0f && tol.getBounds()[1] < 5) || (effect < 0.0f && tol.getBounds()[0] > -5); }
@Override public void addFertilityLine(String chromosomeName, IChromosomeType chromosome, int texOffset) { IGenome genome = getGenome(); IAllele activeAllele = genome.getActiveAllele(chromosome); IAllele inactiveAllele = genome.getInactiveAllele(chromosome); if (mode == DatabaseMode.BOTH) { if (!(activeAllele instanceof IAlleleInteger) || !(inactiveAllele instanceof IAlleleInteger)) { return; } addLine(chromosomeName, GuiElementFactory.INSTANCE.createFertilityInfo((IAlleleInteger) activeAllele, texOffset), GuiElementFactory.INSTANCE.createFertilityInfo((IAlleleInteger) inactiveAllele, texOffset)); } else { boolean active = mode == DatabaseMode.ACTIVE; IAllele allele = active ? activeAllele : inactiveAllele; if (!(allele instanceof IAlleleInteger)) { return; } addLine(chromosomeName, GuiElementFactory.INSTANCE.createFertilityInfo((IAlleleInteger) allele, texOffset)); } }
public final void drawLine(String text, int x, IIndividual individual, IChromosomeType chromosome, boolean inactive) { if (!inactive) { textLayout.drawLine(text, x, getColorCoding(individual.getGenome().getActiveAllele(chromosome).isDominant())); } else { textLayout.drawLine(text, x, getColorCoding(individual.getGenome().getInactiveAllele(chromosome).isDominant())); } }
public final void drawSplitLine(String text, int x, int maxWidth, IIndividual individual, IChromosomeType chromosome, boolean inactive) { if (!inactive) { textLayout.drawSplitLine(text, x, maxWidth, getColorCoding(individual.getGenome().getActiveAllele(chromosome).isDominant())); } else { textLayout.drawSplitLine(text, x, maxWidth, getColorCoding(individual.getGenome().getInactiveAllele(chromosome).isDominant())); } }
public final void drawRow(String text0, String text1, String text2, IIndividual individual, IChromosomeType chromosome) { textLayout.drawRow(text0, text1, text2, ColourProperties.INSTANCE.get("gui.screen"), getColorCoding(individual.getGenome().getActiveAllele(chromosome).isDominant()), getColorCoding(individual.getGenome().getInactiveAllele(chromosome).isDominant())); }
public AnalystPageKaryogram(IWidget parent, IArea area, IIndividual ind) { super(parent, area); setColor(10040319); int y = 4; new ControlTextCentered(this, y, TextFormatting.UNDERLINE + getTitle()).setColor(getColor()); y += 16; y += 8; ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(ind); IBreedingSystem system = Binnie.GENETICS.getSystem(root); int maxBiomePerLine = (int) ((getWidth() + 4.0f - 16.0f) / 22.0f); int karygramX = (getWidth() - (Math.min(maxBiomePerLine, system.getActiveKaryotype().size()) * 18 - 4)) / 2; int dx = 0; int dy = 0; int rem = system.getActiveKaryotype().size(); for (IChromosomeType type : system.getActiveKaryotype()) { new ControlAnalystChromosome(this, karygramX + dx, y + dy, root, type, ind.getGenome().getActiveAllele(type), ind.getGenome().getInactiveAllele(type)); dx += 22; if (dx >= 22 * maxBiomePerLine - 22) { rem -= maxBiomePerLine - 1; if (rem < maxBiomePerLine) { karygramX += (maxBiomePerLine - 1 - rem) * 22 / 2.0f; } dx = 0; dy += 28; } } }
public AnalystPageDatabase(IWidget parent, IArea area, IBreedingSystem system, boolean master) { super(parent, area); this.master = master; setColor(getColor(system)); int y = 4; new ControlTextCentered(this, y, TextFormatting.UNDERLINE + getTitle()).setColor(getColor()); y += 16; new SpeciesSearch(this, y, system); y += 22; new Panel(this, 3, y - 1, getWidth() - 6, getHeight() - y - 8 + 2, MinecraftGUI.PanelType.TAB_OUTLINE).setColor(getColor()); boolean textView = false; Collection<IAlleleSpecies> options = getSpecies(system); for (IAlleleSpecies species : options) { String height = system.getAlleleName(EnumTreeChromosome.HEIGHT, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.HEIGHT)); String fertility = system.getAlleleName(EnumTreeChromosome.FERTILITY, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.FERTILITY)); String yield = system.getAlleleName(EnumTreeChromosome.YIELD, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.YIELD)); String sappiness = system.getAlleleName(EnumTreeChromosome.SAPPINESS, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.SAPPINESS)); String maturation = system.getAlleleName(EnumTreeChromosome.MATURATION, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.MATURATION)); } if (textView) { scroll = new Scroll(this, y, options); } else { scroll = new ControlScrollableContent(this, 4, y, getWidth() - 8, getHeight() - y - 8, 0); scroll.setScrollableContent(getItemScrollList(system, options)); } new DatabaseScrollBar(this); }
public final void drawChromosomeRow(String chromosomeName, IIndividual individual, IChromosomeType chromosome) { IAllele active = individual.getGenome().getActiveAllele(chromosome); IAllele inactive = individual.getGenome().getInactiveAllele(chromosome); textLayout.drawRow(chromosomeName, active.getAlleleName(), inactive.getAlleleName(), ColourProperties.INSTANCE.get("gui.screen"), getColorCoding(active.isDominant()), getColorCoding(inactive.isDominant())); }
@Override protected void onFinishTask() { super.onFinishTask(); final Random rand = this.getMachine().getWorld().rand; MachineUtil util = this.getUtil(); final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(util.getStack(Isolator.SLOT_TARGET)); if (root == null) { return; } final IIndividual individual = root.getMember(util.getStack(Isolator.SLOT_TARGET)); if (individual == null) { return; } IChromosomeType[] karyotype = root.getKaryotype(); IChromosomeType chromosome = karyotype[rand.nextInt(karyotype.length)]; IGenome genome = individual.getGenome(); IAllele allele = rand.nextBoolean() ? genome.getActiveAllele(chromosome) : genome.getInactiveAllele(chromosome); Gene gene = Gene.create(allele, chromosome, root); final ItemStack serum = ItemSequence.create(gene); util.setStack(Isolator.SLOT_RESULUT, serum); util.decreaseStack(Isolator.SLOT_SEQUENCER_VIAL, 1); if (rand.nextFloat() < TARGET_LOSS_CHANCE) { util.decreaseStack(Isolator.SLOT_TARGET, 1); } util.drainTank(Isolator.TANK_ETHANOL, ETHANOL_PER_PROCESS); }
@Nullable public ErrorState isValidSerum() { final ItemStack serum = this.getUtil().getStack(Inoculator.SLOT_SERUM_VIAL); final ItemStack target = this.getUtil().getStack(Inoculator.SLOT_TARGET); final IGene[] genes = Engineering.getGenes(serum); if (genes.length == 0) { return new ErrorState(GeneticsErrorCode.INVALID_SERUM_NO); } if (!genes[0].getSpeciesRoot().isMember(target)) { return new ErrorState(GeneticsErrorCode.INVALID_SERUM_MISMATCH); } final IIndividual individual = genes[0].getSpeciesRoot().getMember(target); if (individual != null) { final IGenome genome = individual.getGenome(); for (final IGene gene : genes) { final IAllele a = genome.getActiveAllele(gene.getChromosome()); final IAllele b = genome.getInactiveAllele(gene.getChromosome()); if (!a.getUID().equals(gene.getAllele().getUID()) || !b.getUID().equals(gene.getAllele().getUID())) { return null; } } } return new ErrorState(GeneticsErrorCode.DEFUNCT_SERUM); }
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()); } }
CommandHelpers.sendChatMessage(sender, type.getName() + ": " + genome.getActiveAllele(type).getAlleleName() + " " + genome.getInactiveAllele(type).getAlleleName());
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; }
public AnalystPageGenome(IWidget parent, IArea area, boolean active, IIndividual ind) { super(parent, area); this.active = active; setColor(26265); int y = 4; int width = getWidth(); int center = width / 2; new ControlTextCentered(this, y, TextFormatting.UNDERLINE + getTitle()).setColor(getColor()); y += 16; ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(ind); IBreedingSystem system = Binnie.GENETICS.getSystem(root); Control scaled = new Scaled(this, y); for (IChromosomeType chromo : system.getActiveKaryotype()) { IAllele allele = active ? ind.getGenome().getActiveAllele(chromo) : ind.getGenome().getInactiveAllele(chromo); String alleleName = system.getAlleleName(chromo, allele); int height = CraftGUI.RENDER.textHeight(alleleName, center - 2); new ControlText(scaled, new Area(0, y + (height - 9) / 2, center - 2, 0), system.getChromosomeShortName(chromo) + " :", TextJustification.TOP_RIGHT).setColor(getColor()); new ControlText(scaled, new Area(center + 2, y, center - 2, 0), alleleName, TextJustification.TOP_LEFT).setColor(getColor()); y += 3 + height; } setSize(new Point(width, y + 8)); }