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); } }
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); }