示例#1
0
        public static void Generate(int seed, ref Map map)
        {
            var generateSeed = seed > 0 ? seed : 1234;
            var rng          = new Random(generateSeed);

            map.tiles = new Tile[map.Width * map.Height];

            for (var itY = 0; itY < map.Height; ++itY)
            {
                for (var itX = 0; itX < map.Width; ++itX)
                {
                    var idx = GetTileIndex(itX, itY, map.Width);
                    var c   = TileChars[rng.Next(TileChars.Length)];
                    map.tiles[idx] = new Tile {
                        Location  = new CVec2(itX, itY),
                        Layers    = new Dictionary <LayerType, TileLayer>(),
                        TileType  = WorldLib.ConvertCharToTileType(c),
                        Elevation = rng.Next(-20, 55),
                    };
                    var heatLayer = new HeatLayer {
                        Heat = rng.Next(-20, 55)
                    };
                    map.tiles[idx].Layers.Add(LayerType.Heat, heatLayer);
                }
            }
            VoronoiLib.Voronoi(generateSeed, map.Dimensions, ref map);
        }
示例#2
0
        public string Get(int width, int height, int seed)
        {
            int worldWidth  = width > 0 ? width : 18;
            int worldHeight = height > 0 ? height : 15;
            int worldSeed   = seed > 0 ? seed : 0;
            int total       = worldWidth * worldHeight;

            _logger.LogInformation("generating" + total.ToString());
            Map ceData = new Map(worldWidth, worldHeight);

            WorldGenerator.Generate(worldSeed, ref ceData);

            var sb = new System.Text.StringBuilder();


            sb.Append('{', 1);

            sb.AppendLine();
            sb.Append("   \"width\": ");
            sb.Append(ceData.Width.ToString());
            sb.AppendLine(",");
            sb.Append("   \"height\": ");
            sb.Append(ceData.Height.ToString());
            sb.AppendLine(",");

            Func <Tile, string> tileCharFunc = (t) =>
            {
                TileType tileType = t.TileType;
                return(WorldLib.ConvertTileTypeToChar(tileType).ToString());
            };
            Func <Tile, string> tileElevationFunc = (t) =>
            {
                return(t.Elevation.ToString());
            };

            Func <Tile, string> tileColorFunc = (t) =>
            {
                if (t.Layers.ContainsKey(LayerType.Voronoi))
                {
                    VoronoiLayer layer = t.Layers[LayerType.Voronoi] as VoronoiLayer;
                    return(layer.VoronoiColor.ToWideNumberString());
                }
                else
                {
                    return("#000000");
                }
            };

            GetProperty("tileChar", tileCharFunc, false, true, ref ceData, ref sb);
            GetProperty("tileElevation", tileElevationFunc, true, false, ref ceData, ref sb);
            GetProperty("tileColor", tileColorFunc, true, false, ref ceData, ref sb);
            sb.AppendLine("   \"eof\": \"eof\"");
            sb.Append('}', 1);
            return(sb.ToString());
        }