//Internal Function - Figure out if to spawn them now or add them to an event list private void Parse(int _index) { //Log any attempts to spawn to much stuff if (m_enemySpawning[_index].amount > m_enemyReady.Count) { Debug.Log("You are trying to spawn " + m_enemySpawning[_index].amount + " but you only have " + m_enemyReady.Count + " left\nTrying anyway..."); } //Enemies should all be spawned instantly, there is no need to use the event queue if (m_enemySpawning[_index].delayBetweenSpawns == 0.0f) { //If it has to spawn somewhere random do so if (m_enemySpawning[_index].randomSpawn) { int spawn = (int)Random.Range(0, (float)m_spawnPoints.Length - 0.1f); Spawn(m_enemySpawning[_index].enemyID, m_enemySpawning[_index].amount, spawn); } else //Fixed spawn point { Spawn(m_enemySpawning[_index].enemyID, m_enemySpawning[_index].amount, m_enemySpawning[_index].spawn); } } else { //Just copy data over EventSpawn es = new EventSpawn(); es.delay = m_enemySpawning[_index].delayBetweenSpawns; es.enemyID = m_enemySpawning[_index].enemyID; es.spawn = m_enemySpawning[_index].spawn; es.randomSpawn = m_enemySpawning[_index].randomSpawn; es.nearbySpawnOnly = m_enemySpawning[_index].nearbySpawnOnly; es.nearThreshold = m_enemySpawning[_index].nearThreshold; es.remainingSpawns = m_enemySpawning[_index].amount; es.time = 0.0f; //Add it to the list of spawn events to be processed m_eventSpawn.Add(es); } }
protected virtual void Spawn() { Health = _startHealth; IsLive = true; EventSpawn?.Invoke(); }