private String chromosomesToString(IChromosome[] chromosomes) { StringBuilder stringBuilder = new StringBuilder(); IChromosomeType[] karyotype = getSpeciesRoot().getKaryotype(); for (int i = 0; i < chromosomes.length; i++) { IChromosomeType chromosomeType = karyotype[i]; IChromosome chromosome = chromosomes[i]; stringBuilder.append(chromosomeType.getName()).append(": ").append(chromosome).append("\n"); } return stringBuilder.toString(); }
public Gene(final NBTTagCompound nbt) { this.allele = AlleleManager.alleleRegistry.getAllele(nbt.getString("allele")); String rootKey = nbt.getString("root"); ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(rootKey); Preconditions.checkArgument(root != null, "Could not find root: %s", rootKey); this.root = root; final int chromoID = nbt.getByte("chromo"); Preconditions.checkArgument(chromoID >= 0 && chromoID < this.root.getKaryotype().length, "Invalid chromosomeId: %s", chromoID); this.chromosome = this.root.getKaryotype()[chromoID]; }
@Override public void readFromNBT(final NBTTagCompound nbt) { this.allele = AlleleManager.alleleRegistry.getAllele(nbt.getString("allele")); String rootKey = nbt.getString("root"); ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(rootKey); Preconditions.checkArgument(root != null, "Could not find root: %s", rootKey); this.root = root; final int chromoID = nbt.getByte("chromo"); Preconditions.checkArgument(chromoID >= 0 && chromoID < this.root.getKaryotype().length, "Invalid chromosomeId: %s", chromoID); this.chromosome = this.root.getKaryotype()[chromoID]; }
@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; }
@Nonnull @Override public Map<Object, Object> getMeta(@Nonnull IPartialContext<IIndividual> context) { IIndividual individual = context.getTarget(); Map<Object, Object> out = Maps.newHashMap(); out.put("id", individual.getIdent()); out.put("analyzed", individual.isAnalyzed()); if (individual.isAnalyzed()) { out.put("genome", context.makePartialChild(individual.getGenome()).getMeta()); Map<String, Boolean> pureBred = Maps.newHashMap(); for (IChromosomeType type : individual.getGenome().getSpeciesRoot().getKaryotype()) { pureBred.put(type.getName().toLowerCase(Locale.ENGLISH), individual.isPureBred(type)); } out.put("pureBred", pureBred); } return out; } }
out.put("chance", mutation.getBaseChance()); IChromosomeType[] karyotype = mutation.getRoot().getKaryotype(); Map<String, Object> results = Maps.newHashMapWithExpectedSize(karyotype.length);
private void loadAlleles() { this.invalidChromosomeTypes.clear(); for (IBreedingSystem system : BREEDING_SYSTEMS.values()) { ISpeciesRoot root = system.getSpeciesRoot(); Map<IChromosomeType, List<IAllele>> chromosomeMap = new LinkedHashMap<>(); for (IChromosomeType chromosome : root.getKaryotype()) { TreeSet<IAllele> alleles = new TreeSet<>(new ComparatorAllele()); for (IIndividual individual : root.getIndividualTemplates()) { IGenome genome = individual.getGenome(); IAllele activeAllele = genome.getActiveAllele(chromosome); IAllele inactiveAllele = genome.getInactiveAllele(chromosome); if (chromosome.getAlleleClass().isInstance(activeAllele)) { alleles.add(activeAllele); } if (!chromosome.getAlleleClass().isInstance(inactiveAllele)) { continue; } alleles.add(inactiveAllele); } system.addExtraAlleles(chromosome, alleles); if (alleles.size() == 0) { this.invalidChromosomeTypes.add(chromosome); } else { final List<IAllele> alleleList = new ArrayList<>(alleles); chromosomeMap.put(chromosome, alleleList); } } this.chromosomeArray.put(root, chromosomeMap); } }
final Random rand = new Random(); this.info.clear(); for (final IChromosomeType type : root.getKaryotype()) { if (!Binnie.GENETICS.isInvalidChromosome(type)) { final IAllele allele = ind.getGenome().getActiveAllele(type);
IChromosomeType[] karyotype = getSpeciesRoot().getKaryotype(); for (int i = 0; i < karyotype.length; i++) { IChromosomeType chromosomeType = karyotype[i];
@Override public void readFromNBT(NBTTagCompound nbt) { for (ISpeciesRoot root : AlleleManager.alleleRegistry.getSpeciesRoot().values()) { if (!nbt.hasKey(root.getUID())) { continue; } NBTTagCompound nbtRoot = nbt.getCompoundTag(root.getUID()); for (IChromosomeType chromo : root.getKaryotype()) { if (!nbtRoot.hasKey(String.valueOf(chromo.ordinal()))) { continue; } NBTTagList nbtChromo = nbtRoot.getTagList(String.valueOf(chromo.ordinal()), 8); for (int i = 0; i < nbtChromo.tagCount(); ++i) { String uid = nbtChromo.getStringTagAt(i); IAllele allele = AlleleManager.alleleRegistry.getAllele(uid); if (allele == null) { continue; } Gene gene = new Gene(allele, chromo, root); if (!discoveredGenes.contains(gene)) { discoveredGenes.add(gene); } } } } }
@Override public NBTTagCompound writeToNBT(NBTTagCompound nbt) { for (ISpeciesRoot root : AlleleManager.alleleRegistry.getSpeciesRoot().values()) { NBTTagCompound nbtRoot = new NBTTagCompound(); for (IChromosomeType chromo : root.getKaryotype()) { NBTTagList nbtChromo = new NBTTagList(); for (IGene gene : discoveredGenes) { if (gene.getSpeciesRoot() == root && gene.getChromosome() == chromo) { nbtChromo.appendTag(new NBTTagString(gene.getAllele().getUID())); } } nbtRoot.setTag(String.valueOf(chromo.ordinal()), nbtChromo); } nbt.setTag(root.getUID(), nbtRoot); } return nbt; }
@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); }
for (IChromosomeType chromosomeType : root.getKaryotype()) { if (chromosomeType != speciesChromosomeType) { IAllele allele = defaultTemplate[chromosomeType.ordinal()];
private static IChromosome[] getChromosomes(NBTTagCompound genomeNBT, ISpeciesRoot speciesRoot) { NBTTagList chromosomesNBT = genomeNBT.getTagList("Chromosomes", 10); IChromosome[] chromosomes = new IChromosome[speciesRoot.getDefaultTemplate().length]; String primarySpeciesUid = null; String secondarySpeciesUid = null; for (int i = 0; i < chromosomesNBT.tagCount(); i++) { NBTTagCompound chromosomeNBT = chromosomesNBT.getCompoundTagAt(i); byte chromosomeOrdinal = chromosomeNBT.getByte(SLOT_TAG); if (chromosomeOrdinal >= 0 && chromosomeOrdinal < chromosomes.length) { IChromosomeType chromosomeType = speciesRoot.getKaryotype()[chromosomeOrdinal]; Chromosome chromosome = Chromosome.create(primarySpeciesUid, secondarySpeciesUid, chromosomeType, chromosomeNBT); chromosomes[chromosomeOrdinal] = chromosome; if (chromosomeOrdinal == speciesRoot.getSpeciesChromosomeType().ordinal()) { primarySpeciesUid = chromosome.getPrimaryAllele().getUID(); secondarySpeciesUid = chromosome.getSecondaryAllele().getUID(); } } } return chromosomes; }
@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); } } } }