private void Spawn(EnemySpawnerSO spawnerData)
    {
        int       spawnPointIndex = Random.Range(0, spawnerData.spawnPoints.Length);
        Transform point           = spawnerData.spawnPoints[spawnPointIndex];

        Entity         enemyEntity    = entityDatabase.CreateEntity();
        EnemyComponent enemyComponent = enemyEntity.AddComponent <EnemyComponent>();

        enemyComponent.enemyDO = spawnerData.enemyDO;

        GameObject enemyObject = GameObject.Instantiate(spawnerData.enemyDO.prefab, point.position, point.rotation);

        enemyEntity.AddComponent <TransformComponent>().transform = enemyObject.transform;

        enemyComponent.nav             = enemyObject.GetComponent <NavMeshAgent>();
        enemyComponent.audioSource     = enemyObject.GetComponent <AudioSource>();
        enemyComponent.hitParticles    = enemyObject.GetComponentInChildren <ParticleSystem>();
        enemyComponent.capsuleCollider = enemyObject.GetComponent <CapsuleCollider>();
        enemyComponent.rigidBody       = enemyObject.GetComponent <Rigidbody>();
        enemyComponent.anim            = enemyObject.GetComponent <Animator>();
        enemyComponent.trigger         = enemyObject.GetComponent <TriggerBehaviour>();
        enemyComponent.currentHealth   = spawnerData.enemyDO.startingHealth;

        entityDatabase.QueryType <ColliderComponentMap>().Add(enemyObject, enemyEntity);
    }
Пример #2
0
    IEnumerator StartWave()
    {
        EnemySpawnerSO wave = waveList[actualWave];

        actualWave++;
        while (wave.enemyCount < wave.maxEnemies)
        {
            Vector3 spawnpoint   = spawnPoints[Random.Range(0, spawnPoints.Length)].transform.position;
            int     randomNumber = Random.Range(0, 21);
            randomNumber += difficultyRate;
            if (randomNumber <= 13)
            {
                objPooler.SpawnFromPool("Low", spawnpoint, Quaternion.identity);
            }
            else if (randomNumber >= 14 && randomNumber <= 18)
            {
                objPooler.SpawnFromPool("Medium", spawnpoint, Quaternion.identity);
            }
            else
            {
                objPooler.SpawnFromPool("High", spawnpoint, Quaternion.identity);
            }

            yield return(new WaitForSeconds(wave.spawnDelay));

            wave.enemyCount += 1;
            actualEnemiesAlive++;
        }
        StartCoroutine(WaitForEndofWave());
    }
Пример #3
0
    IEnumerator StartWave()
    {
        if (uiGameplay == null)
        {
            yield return(new WaitForSeconds(1));
        }
        uiGameplay.waveState.gameObject.SetActive(true);
        uiGameplay.waveState.text = $"Wave {actualWave + 1} starting";
        yield return(new WaitForSeconds(2f));

        uiGameplay.waveState.gameObject.SetActive(false);

        EnemySpawnerSO wave = waveList[actualWave];

        while (wave.enemyCount < wave.maxEnemies)
        {
            Vector3 spawnpoint   = spawnPoints[Random.Range(0, spawnPoints.Length)].transform.position;
            int     randomNumber = Random.Range(0, 21);
            randomNumber += difficultyRate;

            if (randomNumber <= 13)
            {
                _objPooler.SpawnFromPool(EnemyDifficulty.NORMAL, spawnpoint, Quaternion.identity);
            }
            else if (randomNumber >= 14 && randomNumber <= 18)
            {
                _objPooler.SpawnFromPool(EnemyDifficulty.RARE, spawnpoint, Quaternion.identity);
            }
            else
            {
                _objPooler.SpawnFromPool(EnemyDifficulty.LEGENDARY, spawnpoint, Quaternion.identity);
            }

            yield return(new WaitForSeconds(wave.spawnDelay));

            wave.enemyCount += 1;
            actualEnemiesAlive++;
        }
        StartCoroutine(WaitForEndofWave());
    }