Beispiel #1
0
 private void Awake()
 {
     if (Instance == null)
     {
         Instance = this;
     }
     else if (Instance != this)
     {
         Destroy(gameObject);
     }
 }
Beispiel #2
0
    // Обнуление буквы перед уборкой в пул
    private void HideLetterInPool()
    {
        GameManager.EndPointGenerationEvent   -= HideLetterInPool;
        GameManager.StartGameEvent            -= StartMovingFromHeader;
        GameManager.ShuffleLettersEvent       -= ChangePosition;
        GameManager.CorrectButtonClickedEvent -= OtherCorrectButtonClicked;
        GameManager.WrongButtonClickedEvent   -= OtherWrongButtonClicked;
        GameManager.EndGameEvent -= HideLetterInPool;

        boxCollider.enabled = false;
        // Обнуляем и возвращаем объект в пул
        LettersPool.ReturnLetterInPool(this);
    }
Beispiel #3
0
    // Создавание и расстановка букв и их теней (белые образы букв)
    private void SpawnHeaderLettersAndShadows(Letter gameLetter)
    {
        spawnPointsInHeader = GenerateHeaderPositions(fonts.Count);

        for (int i = 0; i < fonts.Count; i++)
        {
            // Размещение "тени" буквы
            var letterShadow = LettersPool.SpawnLetterObject();
            letterShadow.GetComponent <LetterController>().SetupLetter(gameLetter, fonts[i], halfLetterSize, spawnPointsInHeader[i], headerPanel, LetterController.LetterType.LetterShadow);

            // Размещение буквы
            var letter = LettersPool.SpawnLetterObject();
            letter.GetComponent <LetterController>().SetupLetter(gameLetter, fonts[i], halfLetterSize, spawnPointsInHeader[i], gameZonePanel, LetterController.LetterType.CorrectLetter);
        }
    }
Beispiel #4
0
    // Генерация позиций для букв на поле
    private void GenerateGameZonePositions()
    {
        // Получаем точки углов зоны для букв (в экранных координатах)
        Rect gameZoneWorldRect = GetWorldRectCorners(gameZonePanel.GetComponent <RectTransform>());

        List <Vector3> generatedPositions = new List <Vector3>();

        for (int i = 0; i < 100; i++)
        {
            // Случайная позиция на экране с учетом размера буквы
            Vector3 randPosition = new Vector3(Random.Range(gameZoneWorldRect.xMin + halfLetterSize.x * canvasScale, gameZoneWorldRect.xMax - halfLetterSize.x * canvasScale),
                                               Random.Range(gameZoneWorldRect.yMin + halfLetterSize.y * canvasScale, gameZoneWorldRect.yMax - halfLetterSize.y * canvasScale), 0);

            // Пускаем OverlapBox, если место свободно, то создаем точку для буквы
            if (ChekAvailableSpace(randPosition))
            {
                generatedPositions.Add(randPosition);
                var collider = LettersPool.SpawnLetterObject();
                collider.GetComponent <LetterController>().SetupLetterAsCollider(halfLetterSize, randPosition);
            }
        }
        // Убираем коллайдеры с поля
        EndPointGenerationEvent?.Invoke();

        // Если создали меньше позиций чем было, то делаем перегенерацию
        if (spawnPositionsCount > generatedPositions.Count)
        {
            GenerateGameZonePositions();
            return;
        }

        spawnPointsInGameZone.Clear();

        // Урезаем максимальное число сгенерированных первый раз позиций на 10%. Иначе можно сгенерировать идеальный вариант на повторное достижение которого нужно будет очень большое количество перегенераций.
        if (spawnPositionsCount == 0)
        {
            spawnPositionsCount = generatedPositions.Count - (int)(generatedPositions.Count * 0.1);
        }
        // Сохраняем получившееся значение точек
        spawnPointsInGameZone = generatedPositions.GetRange(0, spawnPositionsCount);

        // Создаем лист свободных позиций
        freeSpawnPointsInGameZone.Clear();
        freeSpawnPointsInGameZone = new List <Vector3>(spawnPointsInGameZone);

        // Перемешиваем лист
        ListShuffle(freeSpawnPointsInGameZone);
    }
Beispiel #5
0
    // заполнение поля неправильными буквами
    private IEnumerator SpawnWrongLetters(Letter gameLetter)
    {
        Vector3 spawnPosition = new Vector3();

        // Заполняем пока есть свободные позиции
        while (freeSpawnPointsInGameZone.Count > 0)
        {
            GetFreeSpawnPosition(ref spawnPosition);

            // Размещение неправильной буквы
            var wrongLetter = LettersPool.SpawnLetterObject();
            wrongLetter.GetComponent <LetterController>().SetupLetter(rusAlphabet.GetRandomWrongLetter(gameLetter), fonts[Random.Range(0, fonts.Count)], halfLetterSize, spawnPosition, gameZonePanel, LetterController.LetterType.WrongLetter);

            yield return(new WaitForEndOfFrame());
        }
    }