public void instanciarPresa(float x, float y, float z, BitArray codigoGen, int tiempo) { GameObject nuevaPresa = Instantiate(presa, new Vector3(x, y, z), Quaternion.identity); turing nuevaPresaTuring = nuevaPresa.GetComponent <turing>(); nuevaPresaTuring.codigoGenetico = codigoGen; PresaComportamiento nuevaPresaComp = nuevaPresa.GetComponent <PresaComportamiento>(); nuevaPresaComp.codigoGenetico = codigoGen; nuevaPresaComp.tiempoActual = tiempo; nuevaPresaComp.edadMaxima = edadMaximaPresa; TransformacionesPrueba nuevaPresaTransform = nuevaPresa.GetComponent <TransformacionesPrueba>(); nuevaPresaTransform.codigoGenetico = codigoGen; }
private bool reproducirse() { fertil = true; turing esteObjTuring = this.GetComponent <turing>(); TransformacionesPrueba esteObjTransform = this.GetComponent <TransformacionesPrueba>(); bool parejaCercana = false; int masParecido = 0; float distanciaConElActual = 0; distanciaConElActual = 135; for (int i = 0; i < Animales.todasLasPresas.Length; i++) { float distancia = Vector3.Distance(Animales.todasLasPresas[i].transform.position, transform.position); if (distancia <= vision) { float distanciaNueva = 0; turing nuevaPresaTuring = Animales.todasLasPresas[i].GetComponent <turing>(); TransformacionesPrueba nuevaPresaTransform = Animales.todasLasPresas[i].GetComponent <TransformacionesPrueba>(); distanciaNueva = distanciaNueva + Mathf.Abs((esteObjTuring.cantidadRojo - nuevaPresaTuring.cantidadRojo) * 10); distanciaNueva = distanciaNueva + Mathf.Abs((esteObjTuring.cantidadAzul - nuevaPresaTuring.cantidadAzul) * 10); distanciaNueva = distanciaNueva + Mathf.Abs((esteObjTuring.cantidadVerde - nuevaPresaTuring.cantidadVerde) * 10); distanciaNueva = distanciaNueva + Mathf.Abs(esteObjTransform.factorx - nuevaPresaTransform.factorx); distanciaNueva = distanciaNueva + Mathf.Abs(esteObjTransform.factory - nuevaPresaTransform.factory); if (distanciaConElActual > distanciaNueva && distanciaNueva > 0 && distanciaNueva <= diferenciaMaximaAceptada) { distanciaConElActual = distanciaNueva; masParecido = i; parejaCercana = true; parecidoConLaActual = distanciaConElActual; Vector3 vectorAPareja = Animales.todasLasPresas[i].transform.position - transform.position; vectorAPareja = new Vector3(vectorAPareja.x, 0, vectorAPareja.z); direccionAPareja = Quaternion.FromToRotation(Vector3.back, vectorAPareja); PresaComportamiento pareja1Comp = Animales.todasLasPresas[i].GetComponent <PresaComportamiento>(); parejaCercana = pareja1Comp.fertil; } } } return(parejaCercana); }
void Start() { //string uno = String.Concat (Convert.ToInt32(codGen [0]),Convert.ToInt32(codGen [1]),Convert.ToInt32(codGen [2]),Convert.ToInt32(codGen [3])); //int aa = Convert.ToInt32 (uno,2); //Debug.Log (uno); //Debug.Log (aa); presaInst = presa; for (int i = 0; i < numerodepresas; i++) { BitArray codigoGen = generarCodigoGenetico(); GameObject nuevaPresa = Instantiate(presa, new Vector3(random.Next(-20, 20), 0, random.Next(-20, 20)), Quaternion.Euler(0, random.Next(360), 0)); turing nuevaPresaTuring = nuevaPresa.GetComponent <turing>(); nuevaPresaTuring.codigoGenetico = codigoGen; nuevaPresaTuring.turingHabilitado = turingHabilitadoPresa; PresaComportamiento nuevaPresaComp = nuevaPresa.GetComponent <PresaComportamiento>(); nuevaPresaComp.codigoGenetico = codigoGen; nuevaPresaComp.reproduccionHabilidada = reproduccionHabilidadaParaPresas; nuevaPresaComp.diferenciaMaximaAceptada = diferenciaMaximaAceptadaParaReproducirse; nuevaPresaComp.alimentarse = presasPuedenAlimentarse; nuevaPresaComp.metabolismoPorCodigoGenetico = metabolismoPorCodigoGenetico; TransformacionesPrueba nuevaPresaTransform = nuevaPresa.GetComponent <TransformacionesPrueba>(); nuevaPresaTransform.codigoGenetico = codigoGen; } for (int i = 0; i < numerodepredadores; i++) { BitArray codigoGen = generarCodigoGenetico(); GameObject nuevoPredador = Instantiate(predador, new Vector3(random.Next(-20, 20), 0, random.Next(-20, 20)), Quaternion.identity); foreach (Transform t in nuevoPredador.transform) { if (t.gameObject.tag == "pielPredador") { turing turingPredador = t.gameObject.GetComponent <turing>(); turingPredador.codigoGenetico = codigoGen; } } } }
void OnCollisionEnter(Collision collision) { if (collision.gameObject.tag == "comida") { if (vida < capacidadDeAlmacenamiento) { vida = vida + 10; } } else if (collision.gameObject.tag == "predator") { Destroy(gameObject); } else if (collision.gameObject.tag == "pared") { //transform.rotation = Quaternion.Euler(0,360 - transform.rotation.eulerAngles.y,0); choqueParedOCompa = true; tiempoDejarDeAlejarse = tiempoActual + intervaloAlejarseDePared; //Vector3 reflejo = Vector3.Reflect (Vector3.back, collision.contacts [0].normal); //Debug.Log (collision.contacts [0].normal.x + " "+collision.contacts [0].normal.y + " "+collision.contacts [0].normal.z + " "); //Debug.Log (transform.rotation.eulerAngles.y); //transform.rotation = Quaternion.Euler (0,reflejo.y+180,0); float nuevoy, yex = transform.rotation.eulerAngles.y; if (collision.contacts [0].normal.x > 0.95f || collision.contacts [0].normal.x < -0.95f) { nuevoy = 360 - yex; } else { nuevoy = 180 - yex; } transform.rotation = Quaternion.Euler(0, nuevoy, 0); } else if (collision.gameObject.tag == "presa" && reproduccionHabilidada) { ///////////////// turing esteObjTuring = this.GetComponent <turing>(); TransformacionesPrueba esteObjTransform = this.GetComponent <TransformacionesPrueba>(); PresaComportamiento pareja1Comp = collision.gameObject.GetComponent <PresaComportamiento>(); turing pareja1Turing = collision.gameObject.GetComponent <turing>(); TransformacionesPrueba pareja1Transform = collision.gameObject.GetComponent <TransformacionesPrueba>(); bool parejaDispuesta = pareja1Comp.fertil; bool parejaRecienReproducida = pareja1Comp.recienReproducido; float distanciaConElActual = 0; distanciaConElActual = distanciaConElActual + Mathf.Abs((esteObjTuring.cantidadRojo - pareja1Turing.cantidadRojo) * 10); distanciaConElActual = distanciaConElActual + Mathf.Abs((esteObjTuring.cantidadAzul - pareja1Turing.cantidadAzul) * 10); distanciaConElActual = distanciaConElActual + Mathf.Abs((esteObjTuring.cantidadVerde - pareja1Turing.cantidadVerde) * 10); distanciaConElActual = distanciaConElActual + Mathf.Abs(esteObjTransform.factorx - pareja1Transform.factorx); distanciaConElActual = distanciaConElActual + Mathf.Abs(esteObjTransform.factory - pareja1Transform.factory); if (distanciaConElActual <= diferenciaMaximaAceptada && fertil && parejaDispuesta) { BitArray codigoGenActual = esteObjTuring.codigoGenetico; BitArray codigoGenPareja = pareja1Turing.codigoGenetico; int splitCode = 1 + random.Next(35); BitArray codigoGen = new BitArray(36); for (int a = 0; a < splitCode; a++) { codigoGen[a] = codigoGenPareja[a]; } for (int a = splitCode; a < codigoGen.Length; a++) { codigoGen[a] = codigoGenActual[a]; } //Animales.instanciarPresa (transform.position.x, transform.position.y, transform.position.z, codigoGen); GameObject hijo = presa; /* * //turing nuevaPresaTuring = hijo.GetComponent<turing>(); * hijo.GetComponent<turing>().codigoGenetico = codigoGen; * //PresaComportamiento nuevaPresaComp = hijo.GetComponent<PresaComportamiento>(); * hijo.GetComponent<PresaComportamiento>().codigoGenetico = codigoGen; * //TransformacionesPrueba nuevaPresaTransform = hijo.GetComponent<TransformacionesPrueba>(); * hijo.GetComponent<TransformacionesPrueba>().codigoGenetico = codigoGen; */ GameObject nuevaPresa = Instantiate(Animales.presaInst, new Vector3(transform.position.x, transform.position.y, transform.position.z), Quaternion.identity); turing nuevaPresaTuring = nuevaPresa.GetComponent <turing>(); nuevaPresaTuring.codigoGenetico = codigoGen; PresaComportamiento nuevaPresaComp = nuevaPresa.GetComponent <PresaComportamiento>(); nuevaPresaComp.codigoGenetico = codigoGen; nuevaPresaComp.tiempoActual = tiempoActual; TransformacionesPrueba nuevaPresaTransform = nuevaPresa.GetComponent <TransformacionesPrueba>(); nuevaPresaTransform.codigoGenetico = codigoGen; fertil = false; recienReproducido = true; vida = vida / 2; tiempoParaReproducirse = tiempoActual + tiempoDeEsperaEntreReproducciones; transform.rotation = Quaternion.Euler(0, transform.rotation.eulerAngles.y + 180, 0); choqueParedOCompa = true; tiempoDejarDeAlejarse = tiempoActual + intervaloAlejarseDeCompa; tiempoRecienReproducido = 2; } if (distanciaConElActual <= diferenciaMaximaAceptada && fertil && parejaRecienReproducida) { fertil = false; vida = vida / 2; recienReproducido = true; tiempoRecienReproducido = 2; } ///////////////// } }