예제 #1
0
        public MapData GenerateMap()
        {
            if (GenerateFlatMap)
            {
                return(new MapData(MapWidthX + MapData.NonPlayableBufferSize,
                                   MapLengthZ + MapData.NonPlayableBufferSize));
            }
            else
            {
                if (RandomSeed)
                {
                    Seed = new System.Random(DateTime.UtcNow.Millisecond).Next();
                }

                // Generate Simplex Settings based on parameters set in inspector.
                CurrentSimplexSettings2D =
                    new MapGenerator.SimplexSettings2D(Seed, new System.Numerics.Vector2(Offset.x, Offset.y),
                                                       Scale, Octaves, Persistence, Lacunarity);

                // Generate HeighMap2D from Simplex Settings.
                CurrentHeightMap2D = MapGenerator.GenerateSimplexHeightMap2D(((MapWidthX + (MapData.NonPlayableBufferSize)) * VerticeResolution) + 1,
                                                                             ((MapLengthZ + (MapData.NonPlayableBufferSize)) * VerticeResolution) + 1, CurrentSimplexSettings2D);

                var normalisedNoise = GetNormalisedHeightData(CurrentHeightMap2D);

                return(new MapData(MapWidthX + MapData.NonPlayableBufferSize,
                                   MapLengthZ + MapData.NonPlayableBufferSize, normalisedNoise));
            }

            //  TileMapManager.Instance.ActiveMapData.SetTileTerrainType(TileMapManager.Instance.ActiveMapData.TileMap[26, 27], 5);
        }
예제 #2
0
    void TestFunction()
    {
        var settings2D = new MapGenerator.SimplexSettings2D(528491, Vector2.Zero);

        settings2D.offset = new Vector2(5, 5);
        Debug.Log("Generated 2D Settings.");

        //settings2D.seed = new Random(DateTime.UtcNow.Millisecond).Next();

        var heightmap2D = MapGenerator.GenerateSimplexHeightMap2D(50, 50, settings2D);

        Debug.Log("Generated 2D Height Map.");
        var voxelmap3D = MapGenerator.GenerateVoxelMap3D(heightmap2D, 15);

        Debug.Log("Generated 3D Voxel Map.");
        Debug.Log($"VoxelMap Height = {voxelmap3D.Height}");
        int numRendered = 0;

        for (var z = 0; z < voxelmap3D.Height; z++)
        {
            for (var x = 0; x < voxelmap3D.Width; x++)
            {
                for (var y = 0; y < voxelmap3D.Length; y++)
                {
                    if (z == 0)
                    {
                        Debug.Log($"{x},{y}: {heightmap2D.HeightData[x, y]}");
                    }
                    //Debug.Log($"Height Info at ({x},{y},{z}): {voxelmap3D.VoxelData[x,y,z]}");
                    if (voxelmap3D.VoxelData[x, y, z] == 1)
                    {
                        // Check if voxel is exposed
                        if (!CheckIfExposedVoxel(ref voxelmap3D, new Vector3(x, y, z)))
                        {
                            // And skip if it isn't.
                            continue;
                        }
                        var debugVoxel = Instantiate(VoxelGameObject);
                        numRendered++;
                        debugVoxel.transform.position = new Vector3(x / 2f, z / 2f, y / 2f);
                        // Snow
                        if (z > 24)
                        {
                            debugVoxel.GetComponent <MeshRenderer>().sharedMaterial = terrainTypes[2];
                        }
                        // Rock
                        else if (z > 19)
                        {
                            debugVoxel.GetComponent <MeshRenderer>().sharedMaterial = terrainTypes[0];
                        }
                        // Grass
                        else if (z > 12)
                        {
                            debugVoxel.GetComponent <MeshRenderer>().sharedMaterial = terrainTypes[1];
                        }
                        // Dirt
                        else if (z > 8)
                        {
                            debugVoxel.GetComponent <MeshRenderer>().sharedMaterial = terrainTypes[3];
                        }
                        // Rock
                        else if (z > 4)
                        {
                            debugVoxel.GetComponent <MeshRenderer>().sharedMaterial = terrainTypes[0];
                        }
                        // Bedrock
                        else
                        {
                            debugVoxel.GetComponent <MeshRenderer>().sharedMaterial = terrainTypes[4];
                        }
                    }
                }
            }
        }
        Debug.Log($"Voxel rendering completed. {numRendered} cubes rendered.");
    }