Esempio n. 1
0
    IEnumerator harvestLetter()
    {
        //signal the start of the harvest process
        bool colliding = pphysics.CheckLetterCollision();          //the rays haven't been updated after fixedUpdate...we have to make sure we're still on a letter

        if (!harvesting && harvestableLetter != null && !harvestableLetter.Rotating && colliding)
        {
            pphysics.horizontal_move(0, true, false);
            setPlayerActive(false);

            harvesting = true;
            anim.SetBool("harvesting", true);
            harvestableLetter.setAsHarvested();

            float startTime = Time.time;
            while (Time.time - startTime < 1f)
            {
                if (harvestableLetter.HasDisappeared)
                {
                    break;
                }
                yield return(new WaitForEndOfFrame());
            }

            anim.SetBool("harvesting", false);

            //if the letter disappeared while we were harvesting
            if (!harvestableLetter.HasDisappeared)
            {
                bool   newPowerup    = false;
                string l             = harvestableLetter.letter;
                int    powerup_count = 1;
                bool   check_if_POTD = GameManager.IsPOTD(l);                //add checks for all POTD items
                if (check_if_POTD && IncrementPOTDIfExists(l) != null)       //include all place once and destroy objects
                {
                    EventHandler <NewLetterEvent> handler = PowerupChange;
                    if (handler != null)
                    {
                        handler(this, new NewLetterEvent(harvestableLetter, 1));
                    }
                }
                else                   //permanent buffs
                {
                    Letter eventLetter = harvestableLetter;

                    //can only replicate the item in slot 1
                    //need to switch the letter to the powerup[0] slot before we send the event
                    if (harvestableLetter.letter == "C")
                    {
                        sendHandlerEvent(eventLetter, powerups [0].count > 1 ? powerups [0].count : 0);
                        if (powerups.Count > 0 && powerups [0] != null)
                        {
                            eventLetter.letter = powerups [0].letter.letter;
                            powerup_count      = powerups [0].count;
                            newPowerup         = true;
                        }
                    }
                    //can only use the N powerup with an item in slot 1
                    else if (harvestableLetter.letter == "N")
                    {
                        if (powerups.Count > 0)
                        {
                            while (powerups.Count > 0)
                            {
                                PowerupRemoved(powerups [powerups.Count - 1]);
                                powerups.RemoveAt(powerups.Count - 1);
                            }
                        }
                        sendHandlerEvent(eventLetter, 0);
                    }
                    else if (harvestableLetter.letter == "X")
                    {
                        foreach (Powerup p in powerups)
                        {
                            if (GameManager.IsPOTD(p.letter.letter))
                            {
                                p.count++;
                            }
                        }
                        sendHandlerEvent(eventLetter, 0);
                    }
                    else if (harvestableLetter.letter == "P")
                    {
                        sendHandlerEvent(eventLetter, -2);
                        transform.position = originalPosition;
                        List <Letter> letters = GameObject.FindGameObjectsWithTag("Letter").Select(a => a.GetComponent <Letter> ()).ToList();
                        foreach (Letter a in letters)
                        {
                            if (a != pphysics.collisionLetter)
                            {
                                a.ResetLetter();
                            }
                        }

                        //should we also destroy in air throwables?
                    }
                    //we're picking up a new powerup
                    else
                    {
                        newPowerup = true;
                        sendHandlerEvent(eventLetter, 0);
                    }
                }

                if (newPowerup)
                {
                    Powerup power = new Powerup(harvestableLetter);
                    power.count = powerup_count;
                    PowerupAdded(power);
                    if (powerups.Count > 1 && powerups [0] == null)
                    {
                        //if item2 is defined but item1 is null (POTD was used)
                        powerups [0] = power;
                    }
                    else
                    {
                        powerups.Insert(0, power);
                    }

                    while (powerups.Count > 2)
                    {
                        PowerupRemoved(powerups [powerups.Count - 1]);
                        powerups.RemoveAt(powerups.Count - 1);
                    }

                    //if something is already mapped to x, store mapping as y
                    if (getIndexFromMapping("X") >= 0)
                    {
                        powerups [0].buttonMapping = "Y";
                    }
                    else
                    {
                        powerups [0].buttonMapping = "X";
                    }
                }
            }

            harvestableLetter = null;
            harvesting        = false;

            if (GameManager.letters_active > 0)
            {
                setPlayerActive(true);
            }
        }
        yield return(null);
    }