public void OnDrop(PointerEventData eventData)
    {
        //print("drop");

        PartImagePanel PIP = eventData.pointerDrag.GetComponent <PartImagePanel>();

        main = PIP.MainScript;

        if (PuzzleComponents.PuzzleCorrectWords.Contains(PIP.PartWord))
        {
            SpriteIndex++;
            PuzzleImage.sprite = PuzzleComponents.PuzzleImageSprites[SpriteIndex];
            Destroy(PIP.gameObject);

            main.SpeechSource.Stop();

            AudioClip correctPuzzlePart = main.CorrectPuzzlePart[Random.Range(0, main.CorrectPuzzlePart.Length)];
            main.SpeechSource.PlayOneShot(correctPuzzlePart);

            if (SpriteIndex == PuzzleComponents.PuzzleCorrectWords.Length)
            {
                PuzzleIsDone = true;

                AudioClip puzzleIsDone = main.PuzzleIsDone[Random.Range(0, main.PuzzleIsDone.Length)];
                main.SpeechSource.PlayOneShot(puzzleIsDone);

                main.PuzzleAnimator.SetTrigger("DONE");

                // Стэк уплывает с экрана
                main.PartsGridAnimator.SetTrigger("DOWN");
            }
        }
        else
        {
            PIP.transform.SetParent(main.PartsGrid);
            AudioClip wrongPuzzlePart = main.WrongPuzzlePart[Random.Range(0, main.WrongPuzzlePart.Length)];
            main.SpeechSource.clip = wrongPuzzlePart;
            main.SpeechSource.Play();
        }
    }
Beispiel #2
0
    IEnumerator BeforePuzzleDialog()
    {
        yield return(new WaitForSeconds(1f));

        SpeechSource.PlayOneShot(Puzzle.PuzzleComponents.BadPoem);
        yield return(new WaitForSeconds(Puzzle.PuzzleComponents.BadPoem.length + 1f));

        AudioClip letsTryPuzzleSpeech = LetsTryPuzzleSpeech[Random.Range(0, LetsTryPuzzleSpeech.Length)];

        SpeechSource.PlayOneShot(letsTryPuzzleSpeech);

        // Добавляем в стэк части с правильными словами
        for (int i = 0; i < Puzzle.PuzzleComponents.PuzzleCorrectWords.Length; i++)
        {
            string curword = Puzzle.PuzzleComponents.PuzzleCorrectWords[i];
            for (int j = 0; j < AllParts.Length; j++)
            {
                if (AllParts[j].PartWord == curword)
                {
                    PartImagePanel part = Instantiate(PartPrefab).GetComponent <PartImagePanel>();
                    part.PartImage.sprite = AllParts[j].PartSprite;
                    part.PartWord         = AllParts[j].PartWord;
                    part.transform.SetParent(PartsGrid);
                    part.transform.localScale = Vector3.one;
                    part.MainScript           = this;
                    break;
                }
            }
        }

        // Добавляем в стэк части с неправильными словами
        int UncorrectWordsCount = Puzzle.PuzzleComponents.WholePartsCount - Puzzle.PuzzleComponents.PuzzleCorrectWords.Length;

        int[] usedIndexes = new int[UncorrectWordsCount];
        for (int i = 0; i < usedIndexes.Length; i++)
        {
            usedIndexes[i] = -1;
        }
        for (int i = 0; i < UncorrectWordsCount; i++)
        {
            while (true)
            {
                int rnd = Random.Range(0, AllParts.Length);
                if (!usedIndexes.Contains(rnd))
                {
                    if (!Puzzle.PuzzleComponents.PuzzleCorrectWords.Contains(AllParts[rnd].PartWord))
                    {
                        PartImagePanel part = Instantiate(PartPrefab).GetComponent <PartImagePanel>();
                        part.PartImage.sprite = AllParts[rnd].PartSprite;
                        part.PartWord         = AllParts[rnd].PartWord;
                        part.transform.SetParent(PartsGrid);
                        part.transform.localScale = Vector3.one;
                        part.MainScript           = this;

                        usedIndexes[i] = rnd;
                        break;
                    }
                }
            }
        }

        // Перемешиваем дочерние объекты стэка
        for (int i = 0; i < 30; i++)
        {
            int rndIndex = Random.Range(0, PartsGrid.childCount);
            PartsGrid.GetChild(rndIndex).SetAsFirstSibling();
        }

        yield return(new WaitForSeconds(5f));

        // Выплывает стэк на экран
        PartsGridAnimator.SetTrigger("UP");

        yield return(new WaitForSeconds(letsTryPuzzleSpeech.length - 5f));
    }