Esempio n. 1
0
    public void Mate(AGene[] genesMale, AGene [] genesFemale)
    {
        genes = new AGene[number_of_behaviors];

        if (genesMale == null || genesFemale == null)
        {
            for (int i = 0; i < genes.Length; ++i)
            {
                genes[i] = new AGene {
                    oneHalf = (AnAllele)Random.Range(0, 6), otherHalf = (AnAllele)Random.Range(0, 6)
                };
            }
        }
        else
        {
            for (int i = 0; i < genes.Length; ++i)
            {
                genes[i] = new AGene {
                    oneHalf   = Random.Range(0, 2) == 0 ? genesMale[i].oneHalf : genesMale[i].otherHalf,
                    otherHalf = Random.Range(0, 2) == 0 ? genesFemale[i].oneHalf : genesFemale[i].otherHalf
                };
            }
        }

        rend.material.color = UpdateColor();
    }
Esempio n. 2
0
    private void Update()
    {
        Transform closest = GetClosest(encounters);

        if (closest == null)
        {
            return;
        }

        int   behaviorGeneIndex = closest.tag == "Predator" ? 0 : closest.tag == "Food" ? 1 : 2;
        AGene gene = behaviorGenes.genes[behaviorGeneIndex];

        bool atLeastOneDominant = false;

        if ((int)gene.oneHalf > 2)
        {
            atLeastOneDominant = true;
            ExecuteBehavior((int)gene.oneHalf % 3, closest);
        }
        if ((int)gene.otherHalf > 2 && ((int)gene.oneHalf % 3 != (int)gene.otherHalf % 3 || !atLeastOneDominant))
        {
            atLeastOneDominant = true;
            ExecuteBehavior((int)gene.otherHalf % 3, closest);
        }
        else if (!atLeastOneDominant)
        {
            if ((int)gene.oneHalf % 3 != (int)gene.otherHalf % 3)
            {
                ExecuteBehavior((int)gene.oneHalf % 3, closest);
                ExecuteBehavior((int)gene.otherHalf % 3, closest);
            }
            else
            {
                ExecuteBehavior((int)gene.oneHalf % 3, closest);
            }
        }
    }