public void Populate3DLevel(int xPos, int zPos, string id)
    {
        Vector3 spawnPos = new Vector3(transform.position.x + xPos, transform.position.y, transform.position.z + zPos);

        GameObject newfloor  = null;
        GameObject newobject = null;

        switch (id[0])
        {
        case 'P':
            Debug.Log("player made");
            newobject = Instantiate <GameObject>(_playerOBJ, spawnPos, _playerOBJ.transform.rotation, transform);
            newobject.AddComponent <Player>();
            newobject.GetComponent <Player>().Init(xPos, zPos);
            GridHandler.AddObjectToGrid(xPos, zPos, newobject.GetComponent <Player>());
            newfloor = Instantiate <GameObject>(_floorOBJ, spawnPos, _floorOBJ.transform.rotation, transform);
            break;

        case 'O':
            Debug.Log("tile made");
            newobject = null;
            newfloor  = Instantiate <GameObject>(_floorOBJ, spawnPos, _floorOBJ.transform.rotation, transform);
            break;

        case 'L':
            Debug.Log("light source made");
            string[] letters1 = Regex.Split(id, ":");
            newobject = Instantiate <GameObject>(_yLightHouseOBJ, spawnPos, _yLightHouseOBJ.transform.rotation, transform);
            newobject.AddComponent <TestObjectScript>();
            GridHandler.AddObjectToGrid(xPos, zPos, newobject.GetComponent <TestObjectScript>());
            if (letters1[1] == "S")
            {
                newobject.transform.Rotate(Vector3.up, 90);
            }
            else if (letters1[1] == "W")
            {
                newobject.transform.Rotate(Vector3.up, 180);
            }
            else if (letters1[1] == "N")
            {
                newobject.transform.Rotate(Vector3.up, 270);
            }
            newfloor = Instantiate <GameObject>(_floorOBJ, spawnPos, _floorOBJ.transform.rotation, transform);
            break;

        case 'B':
            Debug.Log("bridge made");
            string[] letters2 = Regex.Split(id, ":");
            newobject = null;
            newfloor  = Instantiate <GameObject>(_bridgeOBJ, spawnPos, _bridgeOBJ.transform.rotation, transform);
            if (letters2[1] == "V")
            {
                newfloor.transform.Rotate(Vector3.up, 90);
            }
            //add script to brdige to do cool color stuff
            break;

        case 'W':
            Debug.Log("wall made");

            string[] letters3 = Regex.Split(id, ":");
            newobject = Instantiate <GameObject>(_wallOBJ, spawnPos, _wallOBJ.transform.rotation, transform);
            if (letters3[1] == "N")
            {
                newobject.transform.Rotate(Vector3.up, 90);
            }
            else if (letters3[1] == "E")
            {
                newobject.transform.Rotate(Vector3.up, 180);
            }
            else if (letters3[1] == "S")
            {
                newobject.transform.Rotate(Vector3.up, 270);
            }
            newfloor = null;
            break;

        default:
            Debug.Log("nothing made");
            newobject = null;
            newfloor  = null;
            break;
        }

        _objectTracker[xPos, zPos] = newobject;
        _floorTracker[xPos, zPos]  = newfloor;
    }