コード例 #1
0
    /// <summary>
    /// Go to the next letter
    /// </summary>
    public void NextLetter()
    {
        // If the word is completed, start a new word
        if (_wordController.IsCompleted())
        {
            SetNextWord();
            return;
        }

        // Spawn more enemies for the next letter
        var numLettersObtained = _wordController.GetNumberObtainedLetters();
        var numEnemies         = Mathf.Pow(_expoBase, numLettersObtained);

        // Spawn real letter enemy
        var nextLetter = _wordController.GetNextLetter();

        _enemyController.CreateEnemy(nextLetter);
        var unobtainedLetters = _wordController.GetUnobtainedLetters();

        // Spawn dud letter enemies
        for (int i = 1; i < numEnemies; ++i)
        {
            char randomLetter;
            do
            {
                randomLetter = (char)Random.Range((float)'A', 'Z');
            } while (randomLetter == nextLetter || unobtainedLetters.Contains(randomLetter));

            _enemyController.CreateEnemy(randomLetter);
        }
    }
コード例 #2
0
ファイル: PlayerController.cs プロジェクト: codemaster/LD41
    /// <summary>
    /// Shoots at an enemy
    /// </summary>
    private void Shoot()
    {
        // If the particle system is already playing, don't shoot again
        if (_gunParticle.isPlaying)
        {
            return;
        }

        // Show the particle
        _gunParticle.Play();

        // Play the sound
        _soundController.PlaySFX(_soundController.Gunshot);

        // Note: Using Vector3.back, as our characters are technically backward.
        // TODO: Maybe adjust characters to go forward instead. NavMesh issue?
        var shootPos   = transform.position + Vector3.back + Vector3.up;
        var enemyLayer = LayerMask.NameToLayer("Enemy");
        var layerMask  = 1 << enemyLayer;

        // Check if our shotgun spread hit any enemies
        var colliders = Physics.OverlapSphere(shootPos, _shotgunScatterRange, layerMask);

        if (colliders.Length == 0)
        {
            return;
        }

        // Enemies were hit!
        var enemies = colliders.Select(c => c.GetComponent <Enemy>()).ToList();

        // If we hit any enemies
        if (enemies.Count > 0)
        {
            // Play the enemy hurt sound
            _soundController.PlaySFX(_soundController.EnemyHurt);
        }

        // While we have enemies left...
        while (enemies.Count > 0)
        {
            try
            {
                // If any of the enemies are the next letter
                var foundEnemy = enemies.First(e => e.Letter == _wordController.GetNextLetter());
                // We obtained the letter!
                _wordController.ObtainLetter();
                // Play the sound
                _soundController.PlaySFX(_soundController.GainPoints);
                // Increment the score!
                _scoreController.Score += _scoreController.ScorePerLetterIncrement *
                                          _wordController.GetNumberObtainedLetters();
                // Remove the enemy from the listing
                enemies.Remove(foundEnemy);
                // Destroy the enemy
                _enemyController.DestroyEnemy(foundEnemy);
                // Go to the next letter!
                _gameController.NextLetter();
            }
            catch
            {
                // Otherwise, penalty for the enemies left
                var numEnemies = enemies.Count;
                // Play the sound
                _soundController.PlaySFX(_soundController.LosePoints);
                // Decrement the score!
                _scoreController.Score -= _scoreController.ScoreDecrementPerBadEnemy *
                                          _wordController.GetNumberObtainedLetters();
                // Destroy the enemies
                _enemyController.DestroyEnemies(enemies);
                enemies.Clear();
            }
        }
    }