using UnityEngine;
using System.Collections;
public class SpawnEnemy : MonoBehaviour {
public float spawnTimer;
public float spawnStartDelay;
public float minY;
public float maxY;
public GameObject [] enemies;
private float lastSpawnPos;
private int [] enemyCount;
private int [] enemySceneLimit;
void Start ()
{
enemyCount = new int [enemies.Length];
foreach(int i in enemyCount)
{
enemyCount[i] = 0;
}
enemySceneLimit = new int [enemies.Length];
for(int i = 0;i<enemies.Length;i++)
{
enemySceneLimit[i] = enemies[i].GetComponent<EnemyData>().sceneLimit;
}
InvokeRepeating("Spawn",spawnStartDelay,spawnTimer);
}
private void Spawn()
{
float spawnPos;
while(true)
{
spawnPos = Random.Range(minY,maxY);
if(Mathf.Abs(spawnPos - lastSpawnPos) > 2)
{
int enemyToSpawn = FindEnemyToSpawn(GameManager.instance.PlayerLevel);
GameObject clone = (GameObject)Instantiate(enemies[enemyToSpawn],
new Vector3(transform.position.x,spawnPos,0),transform.rotation);
clone.name = enemies[enemyToSpawn].name;
enemyCount[enemyToSpawn]++;
break;
}
}
lastSpawnPos = spawnPos;
}
private int FindEnemyToSpawn(int maxLevel)
{
return FindNextEnemyToSpawn(Random.Range(0, Math.Max(enemies.Length, maxLevel + 1)));
}
private int FindNextEnemyToSpawn(int enemyToSpawn)
{
if (enemyToSpawn == 0)
{
return 0;
}
while((enemyToSpawn < enemies.Length) && (enemyCount[enemyToSpawn] >= enemySceneLimit[enemyToSpawn]))
{
enemyToSpawn++;
}
return enemyToSpawn == enemies.Length ? 0 : enemyToSpawn;
}
public void DecrementCount(string name)
{
int enemyToDecrement = 0;
for(int i = 0;i<enemies.Length;i++)
{
if(name == enemies[i].name)
{
enemyToDecrement = i;
}
}
enemyCount[enemyToDecrement]-=1;
}
}