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();
        }
예제 #3
0
    //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;
 }