Example #1
0
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (coolingDown)
        {
            return;
        }
        if (collision.gameObject.tag.Equals("enemy") && drive > 40)
        {
            drive = 0;
            StartCoroutine(CooldownCoroutine());

            // Probabilidad de Reproducirse
            if (Random.value < 0.5f)
            {
                return;
            }

            // Reproduccion
            I_Individual <EnemyDNA> i_child = Cross(collision.gameObject.GetComponent <Enemy>());
            Vector3 offset = Random.insideUnitCircle * 2f;
            Enemy   child  = Instantiate(enemyPrefab, transform.position + offset, Quaternion.identity, null);
            // Set child
            child.gen = gen + 1;
            child.DNA = i_child.DNA;

            print("A child is born!");
            Population.instance.individualCount++;
            Population.instance.births++;
            if (child.gen > Population.instance.maxGen)
            {
                Population.instance.maxGen = child.gen;
            }
            Population.instance.enemies.Add(child);
        }
    }
Example #2
0
    public I_Individual <EnemyDNA> Cross(I_Individual <EnemyDNA> other)
    {
        Enemy child = new Enemy();

        child.DNA       = new EnemyDNA(numSenses, degrees);
        child.DNA.Color = Random.value < 0.5f ? DNA.Color : other.DNA.Color;

        for (int i = 0; i < numSenses; i++)
        {
            for (int j = 0; j < degrees + 1; j++)
            {
                DNA.coefs[i][j] = Random.value < 0.5f ? DNA.coefs[i][j] : other.DNA.coefs[i][j];
            }
        }

        return(child);
    }