/// <summary> /// Buscamos objetos 'Lechuga' que no estén activos, para poder volver a lanzarlos. /// Si no hay ningunoi disponible, creamos uno y lo añadimos a la lista. /// De esta forma evitamos que se agrande innecesariamente el número de objetos en memoria. /// </summary> private GreenCabbage GetGreenCabbage() { GreenCabbage c = greenCabbages.Find(x => !x.isActive); if (c == null) { c = Instantiate(cabbagePrefab).GetComponent <GreenCabbage>(); greenCabbages.Add(c); } return(c); }
void Update() { //Si el juego está pausado, no ejecutamos el update, de forma que no movemos los objetos ni dejamos al jugador interactuar con ellos. if (isPaused) { return; } // Si el momento actual menos la última vez que lanzamos un objeto es mayor que la velocidad de generación, podemos generar otro objeto. if (Time.time - lastSpawn > deltaSpawn) { GreenCabbage cabbage = GetGreenCabbage(); float randomX = Random.Range(-1.55f, 1.55f); float randomY = Random.Range(1.75f, 2.75f); cabbage.LaunchCabbage(randomY, randomX, -randomX); // Usamos una variable random para lanzar de vez en cuando lechugas rojas, azules o incluso brocolis. randomCabbage = Random.Range(0, 100); if (randomCabbage > 75 && randomCabbage < 85) { RedCabbage RrCabbage = GetRedCabbage(); randomX = Random.Range(-1.55f, 1.55f); randomY = Random.Range(1.75f, 2.75f); RrCabbage.LaunchCabbage(randomY, randomX, -randomX); } else if (randomCabbage > 90) { BlueCabbage bCabbage = GetBlueCabbage(); randomX = Random.Range(-1.55f, 1.55f); randomY = Random.Range(1.75f, 2.75f); bCabbage.LaunchCabbage(randomY, randomX, -randomX); } else if (randomCabbage == 66 || randomCabbage == 33 || randomCabbage == 99) { BroccoliManager bro = GetBroccoli(); randomX = Random.Range(-1.55f, 1.55f); randomY = Random.Range(1.75f, 2.75f); bro.LaunchBroccoli(randomY, randomX, -randomX); } //Seteamos él último lanzamiento al momento actual. lastSpawn = Time.time; } if (Input.GetMouseButton(0)) { //Recogemos el punto donde se ha pulsado la pantalla Vector3 position = Camera.main.ScreenToWorldPoint(Input.mousePosition); //Marcamos la posición delante de los demás objetos, para poder ver el trazo. position.z = -1; trail.position = position; //Recogemos las áreas de colisión de todos los objetos en juego Collider2D[] thisFrameGreenCabbages = Physics2D.OverlapPointAll(new Vector2(position.x, position.y), LayerMask.GetMask("GreenCabbage")); Collider2D[] thisFrameRedCabbages = Physics2D.OverlapPointAll(new Vector2(position.x, position.y), LayerMask.GetMask("RedCabbage")); Collider2D[] thisFrameBlueCabbages = Physics2D.OverlapPointAll(new Vector2(position.x, position.y), LayerMask.GetMask("BlueCabbage")); Collider2D[] thisFrameBroccolies = Physics2D.OverlapPointAll(new Vector2(position.x, position.y), LayerMask.GetMask("Broccoli")); //Comprobamos que haya una cierta velocidad de movimiento en pantalla, para dar la sensación de corte y no permitir sumar puntos solo tocando los objetos. if ((Input.mousePosition - lastMousePos).sqrMagnitude >= minimum_cut_Speed) { //Comprobamos si el trazo dibujado por el jugador encuentra algún çarea de colisión, y de esta forma, cortamos el objeto foreach (Collider2D c2 in thisFrameGreenCabbages) { for (int i = 0; i < collsGreenCabbage.Length; i++) { if (c2 == collsGreenCabbage[i]) { c2.GetComponent <GreenCabbage>().CutCabbage(); minusDeltaSpawn(1); } } } foreach (Collider2D c2 in thisFrameRedCabbages) { for (int i = 0; i < collsRedCabbage.Length; i++) { if (c2 == collsRedCabbage[i]) { c2.GetComponent <RedCabbage>().CutCabbage(); minusDeltaSpawn(2); } } } foreach (Collider2D c2 in thisFrameBlueCabbages) { for (int i = 0; i < collsBlueCabbage.Length; i++) { if (c2 == collsBlueCabbage[i]) { c2.GetComponent <BlueCabbage>().CutCabbage(); minusDeltaSpawn(3); } } } foreach (Collider2D c2 in thisFrameBroccolies) { for (int i = 0; i < collsBroccoli.Length; i++) { if (c2 == collsBroccoli[i]) { c2.GetComponent <BroccoliManager>().CutBroccoli(); } } } } collsGreenCabbage = thisFrameGreenCabbages; collsRedCabbage = thisFrameRedCabbages; collsBlueCabbage = thisFrameBlueCabbages; collsBroccoli = thisFrameBroccolies; lastMousePos = Input.mousePosition; } }