GameObject GetTileFromList(EnvironmentSet.EnvironmentTile tile)
    {
        List <GameObject> listOfTileObjects = pooledEnvironmentTiles[tile];

        for (int i = 0; i < listOfTileObjects.Count; i++)
        {
            if (listOfTileObjects[i].activeSelf == false)
            {
                return(listOfTileObjects[i]);
            }
        }

        // if we didn't find an object, we instantiate another and start again
        // TODO: this can be optimised
        SpawnEnvironmentTile(tile);
        return(GetTileFromList(tile));
    }
    void SpawnEnvironmentTile(EnvironmentSet.EnvironmentTile tile)
    {
        GameObject tileObject = Instantiate(tile.prefab, transform.position, Quaternion.Euler(rotationOffset)) as GameObject;

        tileObject.transform.parent = dynamicObjects;
        tileObject.SetActive(false);

        if (pooledEnvironmentTiles.ContainsKey(tile))
        {
            pooledEnvironmentTiles[tile].Add(tileObject);
        }
        else
        {
            List <GameObject> tileObjectList = new List <GameObject>();
            tileObjectList.Add(tileObject);
            pooledEnvironmentTiles.Add(tile, tileObjectList);
        }
    }