예제 #1
0
    public static void CreateTerrainmap(ref TerrainType[,] terrainmap, float[,] matrix, LocalTerrainSettings terrainParam)
    {
        ushort height = (ushort)terrainmap.GetLength(0);
        ushort width = (ushort)terrainmap.GetLength(1);

        for (ushort y = 0; y < height; ++y)
            for (ushort x = 0; x < width; ++x)
                if (matrix[y, x] < terrainParam.Terrains[0].StartingHeight)
                    terrainmap[y, x] |= terrainParam.BottommostTerrain.TerrainType;
                else if (matrix[y, x] >= terrainParam.Terrains[terrainParam.Terrains.Length - 1].StartingHeight)
                    terrainmap[y, x] |= terrainParam.Terrains[terrainParam.Terrains.Length - 1].TerrainType;
                else
                    for (byte i = 1; i < terrainParam.Terrains.Length; ++i)
                        if (matrix[y, x] < terrainParam.Terrains[i].StartingHeight)
                        {
                            terrainmap[y, x] |= terrainParam.Terrains[i - 1].TerrainType;
                            break;
                        }
    }
예제 #2
0
 public static void CreateVegetation(ref LocalMap map, LocalTerrainSettings terrainParam, float vegetationValue)
 {
     float?[,] forestMatrix = new float?[map.Height, map.Width];
     HeighmapNeighboring hmNb;
     hmNb.Left = new float[map.Height];
     hmNb.Top = new float[map.Width];
     hmNb.Right = new float[map.Height];
     hmNb.Bottom = new float[map.Width];
     for (ushort i = 0; i < map.Height; ++i)
         hmNb.Right[i] = hmNb.Left[i] = vegetationValue;
     for (ushort i = 0; i < map.Width; ++i)
         hmNb.Bottom[i] = hmNb.Top[i] = vegetationValue;
     CreateHeightmap(ref forestMatrix, 1, hmNb);//TODO
     for (ushort y = 0; y < map.Height; ++y)
         for (ushort x = 0; x < map.Width; ++x)
         {
             LocalTerrainSettings.Terrain terrain = terrainParam.GetTerrain(map.TerrainMatrix[y, x]);
             if (terrain.PlantProbability > 0 && forestMatrix[y, x] > 0 && Random.value < terrain.PlantProbability * forestMatrix[y, x])
             {
                 Entity plant = GameObject.Instantiate(terrain.Trees[Random.Range(0, terrain.Trees.Length)]);
                 plant.Pos = new U16Vec2(x, y);
                 map.AddObject(plant);
                 /*if (map.ForestMatrix[pos.Y, pos.X] < LocalMapParam.BushesForestValue)
                     plant.GetComponent<SpriteRenderer>().sprite = LocalMapParam.BushSprites[Random.Range(0, LocalMapParam.BushSprites.Length)];
                 else
                     plant.GetComponent<SpriteRenderer>().sprite = LocalMapParam.TreeSprites[Random.Range(0, LocalMapParam.TreeSprites.Length)];*/
             }
         }
 }
예제 #3
0
    //TODO Временно
    public static void CreateLocalMap(ref LocalMap map, LocalTerrainSettings settings, HeighmapNeighboring hmNb, float landscapeRoughness, float forest)
    {
        float?[,] buf = new float?[map.Height, map.Width];

        WorldGenerator.CreateHeightmap(ref buf, landscapeRoughness, hmNb);

        float[,] buf2 = new float[map.Height, map.Width];
        for (ushort y = 0; y < map.Height; ++y)
            for (ushort x = 0; x < map.Width; ++x)
            {
                buf2[y, x] = buf[y, x].Value;
                buf[y, x] = null;
            }
        WorldGenerator.CreateTerrainmap(ref map.TerrainMatrix, buf2, settings);
        WorldGenerator.CreateVegetation(ref map, settings, forest);
    }