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(); } }
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)); }