Ejemplo n.º 1
0
    public void ExportLegoMap()
    {
        LegoMap legoMap = ComputeLegoMap();

        File.WriteAllText("Assets/JSON/" + fileName + ".json", JsonUtility.ToJson(legoMap));
        if (exportToCSV)
        {
            ExportToCSV(legoMap);
        }
    }
Ejemplo n.º 2
0
    void ExportToCSV(LegoMap legoMap)
    {
        // Output initialisation
        int nbHorizontalTiles = Mathf.CeilToInt((float)legoMapSize.x / (float)legoTileSize);
        int nbVerticalTiles   = Mathf.CeilToInt((float)legoMapSize.y / (float)legoTileSize);

        Debug.Log(nbHorizontalTiles + "," + nbVerticalTiles); // Bigger size to compensate the empty spaces of tiles

        int outputHorizontalSize = nbHorizontalTiles * legoTileSize;
        int outputVerticalSize   = nbVerticalTiles * legoTileSize;

        int[] output = new int[outputHorizontalSize * outputVerticalSize];

        for (int i = 0; i < legoMapSize.x; i++)
        {
            for (int j = 0; j < legoMapSize.y; j++)
            {
                output [i * outputVerticalSize + j] = Mathf.RoundToInt(legoMap.columns[i * legoMapSize.y + j].height);
            }
        }


        //Folder and files creation
        AssetDatabase.CreateFolder("Assets/CSV", folderName);

        for (int globalHorizontalIndex = 0; globalHorizontalIndex < nbHorizontalTiles; globalHorizontalIndex++)
        {
            for (int globalVerticalIndex = 0; globalVerticalIndex < nbVerticalTiles; globalVerticalIndex++)
            {
                string        filePath = "Assets/CSV/" + folderName + "/" + fileName + "_" + globalHorizontalIndex + "_" + globalVerticalIndex + ".csv";
                StringBuilder sb       = new StringBuilder();

                int globalIndex = (globalHorizontalIndex * outputVerticalSize + globalVerticalIndex) * legoTileSize; //Index to place on the Tile

                for (int localHorizontalIndex = 0; localHorizontalIndex < legoTileSize; localHorizontalIndex++)
                {
                    string tempLine = "";
                    for (int localVerticalIndex = 0; localVerticalIndex < legoTileSize; localVerticalIndex++)
                    {
                        int localIndex = localHorizontalIndex * outputVerticalSize + localVerticalIndex; // index to select the column inside the tile
                        tempLine += output[globalIndex + localIndex] + delimiter;
                    }
                    sb.AppendLine(tempLine);
                }

                StreamWriter outStream = System.IO.File.CreateText(filePath);
                outStream.WriteLine(sb);
                outStream.Close();
            }
        }
    }
Ejemplo n.º 3
0
    private static MeshColumn[,] CreateVoxelColumnsFromJson(string json)
    {
        LegoMap map = JsonUtility.FromJson <LegoMap>(json);

        MeshColumn[,] meshColumns = new MeshColumn[map.mapSize.x, map.mapSize.y];

        for (int x = 0; x < meshColumns.GetLength(0); x++)
        {
            for (int y = 0; y < meshColumns.GetLength(1); y++)
            {
                meshColumns[x, y] = new MeshColumn(
                    x * meshColumns.GetLength(1) + y,
                    new Vector2(x, y),
                    map.columns[x * meshColumns.GetLength(1) + y].height,
                    map.columns[x * meshColumns.GetLength(1) + y].type
                    );
            }
        }
        return(meshColumns);
    }
Ejemplo n.º 4
0
    public void createJSON()
    {
        LegoMap m = new LegoMap();

        m.mapSize  = new Vector2Int((int)g.sizeGrid.x / g.sizeVoxel, (int)g.sizeGrid.z / g.sizeVoxel);
        m.mapScale = g.sizeVoxel;
        m.columns  = new List <Column>();

        for (int i = 1; i <= g.sizeGrid.x / g.sizeVoxel; i++)
        {
            List <Column> list = new List <Column>();
            for (int k = 1; k <= g.sizeGrid.z / g.sizeVoxel; k++)
            {
                RaycastHit hit;
                if (Physics.Raycast(transform.position + g.basePos + new Vector3(-g.sizeVoxel / 2f, 0, -g.sizeVoxel / 2f) + new Vector3(i, g.sizeGrid.y / g.sizeVoxel, k) * g.sizeVoxel, Vector3.down, out hit, g.sizeGrid.y, layerMask))
                {
                    //Debug.Log(hit.point.y);
                    //Debug.Log("Did Hit");

                    Column c = new Column();
                    c.type   = Column.Type.Ground;
                    c.height = hit.point.y;
                    m.columns.Add(c);
                }
                else
                {
                    Debug.DrawRay(transform.position + g.basePos + new Vector3(-g.sizeVoxel / 2f, 0, -g.sizeVoxel / 2f) + new Vector3(i, g.sizeGrid.y / g.sizeVoxel, k) * g.sizeVoxel, Vector3.down * g.sizeGrid.y, Color.white);
                    Column c = new Column();
                    c.type   = Column.Type.Ground;
                    c.height = 0;
                    m.columns.Add(c);
                    Debug.Log("No Hit");
                }
            }
        }

        //Debug.Log(JsonUtility.ToJson(m));
        File.WriteAllText("Assets/JSON/" + nameMap + ".json", JsonUtility.ToJson(m));
    }
Ejemplo n.º 5
0
    private LegoMap ComputeLegoMap()
    {
        //Initialisation
        int     count   = 0;
        LegoMap legoMap = new LegoMap();

        legoMap.mapSize  = legoMapSize;
        legoMap.mapScale = scale;
        legoMap.columns  = new List <Column>();

        Vector3 rayOrigin = transform.position - new Vector3(
            legoMapSize.x * scale / 2f,
            0,
            legoMapSize.y * scale / 2f
            );

        float minHeight = analyserHeight;

        //Map computation
        for (int x = 0; x < legoMapSize.x; x++)
        {
            for (int z = 0; z < legoMapSize.y; z++)
            {
                Vector3 rayPosition = rayOrigin + new Vector3(
                    (x + 0.5f) * scale,
                    0,
                    (z + 0.5f) * scale
                    );

                RaycastHit  hit;
                float       height = 0;
                Column.Type type   = Column.Type.Default;
                if (Physics.Raycast(rayPosition, Vector3.down, out hit, analyserHeight, collisionMask))
                {
                    height = analyserHeight - hit.distance;
                    if (height < minHeight)
                    {
                        minHeight = height;
                    }

                    if (hit.collider.tag == "Ground")
                    {
                        type = Column.Type.Ground;
                    }
                    if (hit.collider.tag == "Building")
                    {
                        type = Column.Type.Building;
                    }
                }
                Column column = new Column(height, type);
                legoMap.columns.Add(column);
            }
        }

        // Conversion to legos
        for (int i = 0; i < legoMap.columns.Count; i++)
        {
            // Lowest height brought to 0
            if (setGroundAt0)
            {
                if (legoMap.columns[i].height < minHeight)
                {
                    legoMap.columns[i].height = 0;
                }
                else
                {
                    legoMap.columns[i].height -= minHeight;
                }
            }

            legoMap.columns[i].height = Mathf.Round(legoMap.columns[i].height * verticalScaleMultiplicator);
            count += (int)legoMap.columns[i].height;
        }

        legoMap.legoCount = count;

        return(legoMap);
    }