private void Awake()
 {
     InitalizeLibrary();
     main            = this;
     currentSpelling = "";
     state           = SpellingState.SpawningWord;
 }
    private void Update()
    {
        //Check state
        switch (state)
        {
        case SpellingState.SpawningWord:
            if (wordSpawnReference.position.y - wordInitalY >= wordSpawnOffset)
            {
                SpawnNewWord();
            }
            break;

        case SpellingState.DespawningWord:
            if (spawnedWord.transform.position.y < wordSpawnReference.position.y - (wordSpawnOffset))
            {
                if (spawnedWord.activeSelf)
                {
                    spawnedWord.SetActive(false);
                    LevelController.main.DestroyLater(spawnedWord);
                }
                state = SpellingState.Spelling;
            }
            else if ((spawnedWord.transform.position.y < wordSpawnReference.position.y) /*&& (!bubbleGen.isSpawning)*/)
            {
                bubbleGen.isSpawning = true;
            }
            break;

        case SpellingState.WaitingToDespawn:
            bubbleGen.isSpawning = false;
            if (spawnedWord == null)
            {
                state = SpellingState.SpawningWord;
            }
            else if (spawnedWord.transform.position.y < wordSpawnReference.position.y - (wordSpawnOffset))
            {
                if (spawnedWord.activeSelf)
                {
                    spawnedWord.SetActive(false);
                    LevelController.main.DestroyLater(spawnedWord);
                }
                state = SpellingState.SpawningWord;
            }
            break;

        case SpellingState.Spelling:
            break;
        }
    }
    private void SpawnNewWord()
    {
        if (spawnedWord != null)
        {
            if (spawnedWord.activeSelf)
            {
                spawnedWord.SetActive(false);
                LevelController.main.DestroyLater(spawnedWord);
            }
        }
        spawnedWord = (GameObject)Instantiate(wordPrefab, this.transform);
        Vector3 newPos = spawnedWord.transform.position;

        newPos.y = wordSpawnReference.position.y + wordSpawnOffset;
        spawnedWord.transform.position = newPos;

        spawnedWord.GetComponentInChildren <Font3D> ().SetText(NewWord());
        state = SpellingState.DespawningWord;
    }
    public void AddLetter(char letter, Bubble poppedBubble)
    {
        currentSpelling += letter.ToString();
        displayText.text = currentSpelling;
        if (letter != currentWordLetters [currentLetterIndex])
        {
            //Wrong word
            PlayerController.Pitch = 0.1f;
            if ((Score.main.nextLevelReady) && (!Score.main.isCapped))
            {
                NewWordGroup();
                Score.main.nextLevelReady = false;
            }
            else if (Score.main.isCapped)
            {
                NewWordGroup();
            }

            //Change bubble to red
            SpriteRenderer bubbleRen = poppedBubble.GetComponent <SpriteRenderer>();
            if (bubbleRen != null)
            {
                bubbleRen.color = Color.red;
            }
            TextMesh bubbleText = poppedBubble.GetComponentInChildren <TextMesh>();
            if (bubbleText != null)
            {
                bubbleText.color = Color.red;
            }

            bubbleGen.isSpawning = false;
            state = SpellingState.WaitingToDespawn;
            CrossOut.main.CrossWordOut(currentWord, displayText.fontSize);
            LevelController.main.RemoveBubbles();
            Score.main.RestartWordMultiplier();
        }
        else
        {
            currentLetterIndex++;
            if (currentWordLetters.Length == currentLetterIndex)
            {
                //Right word
                audioSource.PlayOneShot(correct);
                Instantiate(correctSpellingPrefab, Camera.main.transform);
                if (Score.main.nextLevelReady)
                {
                    NewWordGroup();
                    Score.main.nextLevelReady = false;
                }
                bubbleGen.isSpawning = false;
                StartCoroutine(CorrectSpellingTimer());
                LevelController.main.RemoveBubbles();
                state = SpellingState.WaitingToDespawn;
                Score.main.CheckWordCount(true);
                if (currentWordIndex < currentWordGroup.Count)
                {
                    currentWordGroup.RemoveAt(currentWordIndex);
                }
                else
                {
                    Debug.LogError("Error to report to Ben: Word index greater than word list length. Index: " + currentWordIndex.ToString() + "   List Length: " + currentWordGroup.Count);
                }
            }
        }
    }