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;
        }
    }