示例#1
0
    /// <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);
    }
示例#2
0
    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;
        }
    }