/// <summary> /// Función que detecta la colisión con una presa para de esa manera ser consumida la planta. Además se añade 1 al número /// de plantas comidas por la presa en cuestión. /// </summary> /// <param name="other"></param> private void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "Presa") { consumirse = true; Presa presa = other.gameObject.GetComponent <Presa>(); presa.AddComida(); } }
/// <summary> /// Función que crea las primeras presas. /// </summary> public void PrimeraGeneracionPresas() { presas = new List <Presa>(); for (int i = 0; i < numeroPresas; i++) { Presa presa = new Presa(); presa = Instantiate(prefabPresa); presa.Initialize(); presas.Add(presa); } }
/// <summary> /// Función que crea la siguiente generación de presas, añadiendo los hijos correspondientes. /// </summary> public void SiguienteGeneracionPresas() { // Creamos una nuevas lista para guardar las siguiente generación siguientesPresas = new List <Presa>(); // Se comprueba cual de las presas no han muerto for (int i = 0, j = 0; i < presas.Count; i++) { if (presas[i].accionActual != AccionesAnimal.Morir) { siguientesPresas.Add(presas[i]); j++; } } // Se destruyen las presas anteriores while (presas.Count > 0) { Destroy(presas[0].gameObject); presas.RemoveAt(0); } // Se copia siguientesPresas en la lista de presas presas = new List <Presa>(siguientesPresas); // Se vacia la lista de siguientesPresas for (int i = 0; i < siguientesPresas.Count; i++) { Destroy(siguientesPresas[i].gameObject); } siguientesPresas = null; hijosAñadidosPresas = 0; for (int i = 0; i < presas.Count - hijosAñadidosPresas; i++) { // Creo un cromosoma nuevo float[] nuevoCromosoma = new float[Mundo.instance.statsNamesPresa.Length]; for (int j = 0; j < nuevoCromosoma.Length; j++) { nuevoCromosoma[j] = presas[i].cromosomas[j]; } // Compruebo si ha tenido hijos if (presas[i].GetPlantasComidas() > 1) { Presa presaHijo = new Presa(); // Creo un cromosoma nuevo float[] nuevoCromosomaHijo = new float[Mundo.instance.statsNamesPresa.Length]; for (int j = 0; j < nuevoCromosomaHijo.Length; j++) { // RECOMBINACION NORMAL DE UNO DE LOS PADRES if (UnityEngine.Random.value > ratioMutacion) { nuevoCromosomaHijo[j] = presas[i].cromosomas[j]; } else // MUTACION { nuevoCromosomaHijo[j] = UnityEngine.Random.Range(0, Mundo.instance.maxRange); } } presas.Add(presaHijo); presas[presas.Count - 1] = Instantiate(prefabPresa); presas[presas.Count - 1].Initialize(nuevoCromosomaHijo); hijosAñadidosPresas++; } // Creo una nueva presa y la inicializo con el nuevo cromosoma. presas[i] = Instantiate(prefabPresa); presas[i].Initialize(nuevoCromosoma); } }