private void addTraitButton_Click(object sender, EventArgs e) { this.SaveTraitData(); this.traitData = new TraitData(); this.traitList.Add(this.traitData); this.traitBox.SelectedIndex = this.traitList.Count - 1; }
private void traitListBox_SelectedIndexChanged(object sender, EventArgs e) { if (this.currentTraitId == ((TraitData)this.traitBox.SelectedItem).Id) { return; } this.traitData = (TraitData)this.traitBox.SelectedItem; this.currentTraitId = this.traitData.Id; this.SetUpBindings(); }
//Generates a list of traits and returns the indices of the traits chromosomes + Genes private int[][] GenerateTraits(int genesCount, string traitName, CreatureManager hManager, string abbreviation) { //List of used chromosome indices for each trait (used to check if already used, rather than adding a new row to the int[][]) List <int> chromosomeIndices = new List <int>(); TraitData tempTraitIndices = new TraitData(); tempTraitIndices.indices = new List <TraitIndices>(); TraitIndices traitData = new TraitIndices(); int[][] traitIndices; int listIndex = 0; bool uniqueIndex; genome = hManager.genomeManager.genome; for (int i = 0; i < genesCount; i++) { uniqueIndex = true; //int chromosomeNumber = Random.Range(0, GenomeManager.GENOME_LENGTH); //int geneNumber = Random.Range(0, genome[chromosomeNumber].genes.Length); int chromosomeNumber = hManager.generator.Next(0, GlobalGEPSettings.GENOME_LENGTH); int geneNumber = hManager.generator.Next(0, genome[chromosomeNumber].genes.Length); while (chromosomeNumber == 22 || (genome[chromosomeNumber].traits >= GlobalGEPSettings.CHROMOSOME_LENGTH)) { //Disallow trait on Sex Chromsoomes //Have to do something special for sex chromosome (as it is 2 different 'types' XY or XX) chromosomeNumber = hManager.generator.Next(0, GlobalGEPSettings.GENOME_LENGTH); } while (genome[chromosomeNumber].genes[geneNumber].traitAttached == true) { //If there is a trait already attached then find a new gene geneNumber = hManager.generator.Next(0, genome[chromosomeNumber].genes.Length); } if (genome[chromosomeNumber].genes[geneNumber].traitAttached == false) { for (int j = 0; j < chromosomeIndices.Count; j++) { if (chromosomeIndices[j] == chromosomeNumber) { //If chromosome number is not unique (chromosome previously chosen for this trait) // then store a reference to that index (j should equal int[j][] below) uniqueIndex = false; listIndex = j; break; } //If is unique, then add to the list and store the new reference to 1 higher than current j value // j + 1 because it is a new insertation listIndex = j + 1; } if (uniqueIndex) { chromosomeIndices.Add(chromosomeNumber); } //Set the index data for the trait // this is used to setup the jagged array in TraitManager.Dictionary<int, int[][]> traitData.chromosomeIndex = chromosomeNumber; traitData.geneIndex = geneNumber; traitData.listIndex = listIndex; tempTraitIndices.indices.Add(traitData); //Signal a trait has been asigned, but don't attach anything yet genome[chromosomeNumber].genes[geneNumber].traitAttached = true; genome[chromosomeNumber].traits++; if (GlobalGEPSettings.RANDOMIZED_TRAITS) { //Change trait on gene to true. AttachTrait(traitName, i, genome[chromosomeNumber].genes[geneNumber], hManager, abbreviation); } } } traitIndices = new int[chromosomeIndices.Count][]; for (int i = 0; i < traitIndices.Length; i++) { traitIndices[i] = new int[GlobalGEPSettings.MAX_GENES_PER_TRAIT]; for (int j = 0; j < traitIndices[i].Length; j++) { traitIndices[i][j] = -1; } } int traitIndicesValueCount = 1; for (int i = 0; i < tempTraitIndices.indices.Count; i++) { //Check to make sure traitIndices at this listIndex (row) is not empty if (traitIndices[tempTraitIndices.indices[i].listIndex] != null) { int count = 0; for (int j = 0; j < traitIndices[tempTraitIndices.indices[i].listIndex].Length; j++) { if (traitIndices[tempTraitIndices.indices[i].listIndex][j] != -1) { count++; } } traitIndicesValueCount = count; } if (traitIndicesValueCount == 0) { //Index [x][0] will ALWAYS be the chromosome index traitIndices[tempTraitIndices.indices[i].listIndex][0] = tempTraitIndices.indices[i].chromosomeIndex; traitIndicesValueCount = 1; } traitIndices[tempTraitIndices.indices[i].listIndex][traitIndicesValueCount] = tempTraitIndices.indices[i].geneIndex; } for (int i = 0; i < traitIndices.Length; i++) { traitIndices[i] = ValidateIndices(traitIndices[i]); } return(traitIndices); }
public Trait(TraitData traitData) { alleles = 3; // signifies an uninitialized value, not a trisomic fly. this.traitData = traitData; }
private void removeTraitButton_Click(object sender, EventArgs e) { this.traitList.Remove(this.traitData); this.traitData = null; this.traitBox.SelectedIndex = this.traitBox.SelectedIndex == 0 ? 0 : this.traitBox.SelectedIndex - 1; }