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