void SpawnEnemy(Vector3 spawn, EnemySpawnSide side = EnemySpawnSide.Right) { List <Vector3> enemyNav = new List <Vector3> (); int rangeVal = Random.Range(0, 200); if (rangeVal % 2 == 0) { AddTrianglePattern(spawn, enemyNav, spread, side); } else { AddSquarePattern(spawn, enemyNav, spread, side); } Destroy(Instantiate(markerPrefab, enemySpawnPoint, Quaternion.identity), markerLifetime); foreach (Vector3 loc in enemyNav) { Destroy(Instantiate(markerPrefab, loc, Quaternion.identity), markerLifetime); } GameObject enemyInstance = Instantiate(enemyPrefab, enemySpawnPoint, Quaternion.identity) as GameObject; EnemyNavigator eiNav = enemyInstance.GetComponent <EnemyNavigator> (); eiNav.SetSpeed(enemySpeed); eiNav.PopulateDirectionList(enemyNav); eiNav.SetMoveDelay(enemyMoveDelay); }
void CalculateSpawnPos(EnemySpawnSide side = EnemySpawnSide.Right) { switch (side) { case EnemySpawnSide.Right: enemySpawnPoint = new Vector3(rightClearX - 2, playerTarget.position.y + spread, 5); break; default: // this will cover Left and Top for right now enemySpawnPoint = new Vector3(leftClearX + 2, playerTarget.position.y + spread, 5); break; } }
IEnumerator SpawnMultiple(int quantity) { EnemySpawnSide side = RandomSideLR(); CalculateSpawnPos(side); GrabPlayerLocation(); Vector3 waveLocation = playerLocation; for (int i = 0; i < quantity; i++) { SpawnEnemy(OffsetSpawnPos(waveLocation, i), side); yield return(new WaitForSeconds(spawnDelay)); } }
void AddTrianglePattern(Vector3 spawn, List <Vector3> enemyNav, float spread, EnemySpawnSide side = EnemySpawnSide.Right) { // multiply by -1 to invert values for left int invert = 1; if (side == EnemySpawnSide.Left) { invert = -1; } enemyNav.Add(spawn + new Vector3(-spread * invert, spread, 0)); // point 1 enemyNav.Add(spawn + new Vector3(0, spread * 2, 0)); // point 2 (top) enemyNav.Add(spawn + new Vector3(spread * invert, spread, 0)); // point 3 enemyNav.Add(DestinationCalc(spawn, side)); }
Vector3 DestinationCalc(Vector3 spawn, EnemySpawnSide side = EnemySpawnSide.Right) { switch (side) { case EnemySpawnSide.Left: return(new Vector3(rightClearX, spawn.y + spread, 0)); // destination break; default: return(new Vector3(leftClearX, spawn.y + spread, 0)); // destination break; } }