82 lines
1.8 KiB
C#
82 lines
1.8 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class SpawnManager : MonoBehaviour
|
|
{
|
|
public GameObject[] spawningEnemies;
|
|
public Transform[] spawnPoints;
|
|
public bool running = true;
|
|
public Animator animator;
|
|
|
|
float elapsedTime;
|
|
private int lastSpawn = -1;
|
|
|
|
[SerializeField]
|
|
private int worldSeed = 1111;
|
|
|
|
[SerializeField]
|
|
private int countEnemies;
|
|
|
|
[SerializeField]
|
|
private GameObject EnemyAlert;
|
|
|
|
void OnEnable()
|
|
{
|
|
Random.InitState(worldSeed);
|
|
}
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
//Eventually put timer in game manager
|
|
StartCoroutine("SpawnNewEnemy");
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
elapsedTime += Time.deltaTime;
|
|
}
|
|
|
|
|
|
IEnumerator SpawnNewEnemy()
|
|
{
|
|
while (running)
|
|
{
|
|
Instantiate(GetRandomEnemy(), GetRandomSpawn().transform.position, Quaternion.identity);
|
|
countEnemies++;
|
|
animator.SetInteger("Enemies", countEnemies);
|
|
//TODO: replace 2f by function depending on elapsed time, decreasing waiting time over time
|
|
yield return new WaitForSeconds(Random.Range(1f, 5f));
|
|
}
|
|
|
|
}
|
|
|
|
GameObject GetRandomEnemy()
|
|
{
|
|
int index = Random.Range(0, spawningEnemies.Length);
|
|
return spawningEnemies[index];
|
|
}
|
|
|
|
/**
|
|
* Get a random spawn point in array.
|
|
* You can't get the same spawn point twice
|
|
*/
|
|
Transform GetRandomSpawn()
|
|
{
|
|
int index = Random.Range(0, spawnPoints.Length);
|
|
if (lastSpawn != -1)
|
|
{
|
|
while (index == lastSpawn)
|
|
{
|
|
index = Random.Range(0, spawnPoints.Length);
|
|
}
|
|
}
|
|
|
|
lastSpawn = index;
|
|
|
|
return spawnPoints[index];
|
|
}
|
|
|
|
}
|