Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 26th, 2012  |  syntax: C#  |  size: 1.86 KB  |  hits: 16  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class SpawnEnemy : MonoBehaviour {
  5.  
  6.         public float spawnTimer;
  7.         public float spawnStartDelay;
  8.         public float minY;
  9.         public float maxY;
  10.         public GameObject [] enemies;
  11.        
  12.         private float lastSpawnPos;
  13.         private int [] enemyCount;
  14.         private int [] enemySceneLimit;
  15.        
  16.         void Start ()
  17.         {
  18.                 enemyCount = new int [enemies.Length];
  19.                 foreach(int i in enemyCount)
  20.                 {
  21.                         enemyCount[i] = 0;
  22.                 }
  23.                 enemySceneLimit = new int [enemies.Length];
  24.                 for(int i = 0;i<enemies.Length;i++)
  25.                 {
  26.                         enemySceneLimit[i] = enemies[i].GetComponent<EnemyData>().sceneLimit;
  27.                 }
  28.                
  29.                 InvokeRepeating("Spawn",spawnStartDelay,spawnTimer);
  30.         }
  31.        
  32.         private void Spawn()
  33.         {
  34.                 float spawnPos;
  35.                 while(true)
  36.                 {
  37.                         spawnPos = Random.Range(minY,maxY);
  38.                         if(Mathf.Abs(spawnPos - lastSpawnPos) > 2)
  39.                         {
  40.                                 int enemyToSpawn = FindEnemyToSpawn(GameManager.instance.PlayerLevel);
  41.  
  42.                                 GameObject clone = (GameObject)Instantiate(enemies[enemyToSpawn],
  43.                                         new Vector3(transform.position.x,spawnPos,0),transform.rotation);
  44.                                 clone.name = enemies[enemyToSpawn].name;
  45.                                 enemyCount[enemyToSpawn]++;
  46.                                 break;
  47.                         }
  48.                 }
  49.                 lastSpawnPos = spawnPos;               
  50.         }
  51.  
  52.         private int FindEnemyToSpawn(int maxLevel)
  53.         {
  54.                 return FindNextEnemyToSpawn(Random.Range(0, Math.Max(enemies.Length, maxLevel + 1)));
  55.         }
  56.  
  57.         private int FindNextEnemyToSpawn(int enemyToSpawn)
  58.         {
  59.                 if (enemyToSpawn == 0)
  60.                 {
  61.                         return 0;
  62.                 }
  63.                 while((enemyToSpawn < enemies.Length) && (enemyCount[enemyToSpawn] >= enemySceneLimit[enemyToSpawn]))
  64.                 {
  65.                         enemyToSpawn++;
  66.                 }
  67.                 return enemyToSpawn == enemies.Length ? 0 : enemyToSpawn;
  68.         }
  69.        
  70.         public void DecrementCount(string name)
  71.         {
  72.                 int enemyToDecrement = 0;
  73.                 for(int i = 0;i<enemies.Length;i++)
  74.                 {
  75.                         if(name == enemies[i].name)
  76.                         {
  77.                                 enemyToDecrement = i;
  78.                         }
  79.                 }
  80.                 enemyCount[enemyToDecrement]-=1;
  81.         }
  82.        
  83.  
  84.        
  85. }