Example #1
0
        protected void FromDungeonGen(int seed, DungeonTemplate template)
        {
            Log.InfoFormat("Loading template for world {0}({1})...", Id, Name);

            var gen = new Generator(seed, template);

            gen.Generate();
            var ras = new Rasterizer(seed, gen.ExportGraph());

            ras.Rasterize();
            var dTiles = ras.ExportMap();

            if (Map == null)
            {
                Map = new Wmap(Manager.Resources.GameData);
                Interlocked.Add(ref _entityInc, Map.Load(dTiles, _entityInc));
                if (Blocking == 3)
                {
                    Sight.CalcRegionBlocks(Map);
                }
            }
            else
            {
                Map.ResetTiles();
            }

            InitMap();
        }
Example #2
0
        private static string generateNext(uint seed, DungeonTemplate template)
        {
            var gen = new DungeonGen((int)seed, template);

            gen.GenerateAsync();
            return(gen.ExportToJson());
        }
Example #3
0
 private void comTemplates_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (comTemplates.SelectedItem != null)
     {
         active = ((Template)comTemplates.SelectedItem).Item;
     }
 }
Example #4
0
        internal DungeonGraph(DungeonTemplate template, Room[] rooms)
        {
            Template = template;

            int dx = int.MaxValue, dy = int.MaxValue;
            int mx = int.MinValue, my = int.MinValue;

            for (int i = 0; i < rooms.Length; i++)
            {
                var bounds = rooms[i].Bounds;

                if (bounds.X < dx)
                {
                    dx = bounds.X;
                }
                if (bounds.Y < dy)
                {
                    dy = bounds.Y;
                }

                if (bounds.MaxX > mx)
                {
                    mx = bounds.MaxX;
                }
                if (bounds.MaxY > my)
                {
                    my = bounds.MaxY;
                }
            }

            const int Pad = 4;

            Width  = mx - dx + Pad * 2;
            Height = my - dy + Pad * 2;

            for (int i = 0; i < rooms.Length; i++)
            {
                var room = rooms[i];
                var pos  = room.Pos;
                room.Pos = new Point(pos.X - dx + Pad, pos.Y - dy + Pad);

                foreach (var edge in room.Edges)
                {
                    if (edge.RoomA != room)
                    {
                        continue;
                    }
                    if (edge.Linkage.Direction == Direction.South || edge.Linkage.Direction == Direction.North)
                    {
                        edge.Linkage = new Link(edge.Linkage.Direction, edge.Linkage.Offset - dx + Pad);
                    }
                    else if (edge.Linkage.Direction == Direction.East || edge.Linkage.Direction == Direction.West)
                    {
                        edge.Linkage = new Link(edge.Linkage.Direction, edge.Linkage.Offset - dy + Pad);
                    }
                }
            }
            Rooms = rooms;
        }
Example #5
0
 private static void createCache(string key, DungeonTemplate template)
 {
     logger.Info($"Generating cache for dungeon: {key}");
     cachedMaps.Add(key, new List <string>());
     for (var i = 0; i < 3; i++) //Keep at least 3 maps in cache
     {
         cachedMaps[key].Add(generateNext((uint)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds, template));
     }
 }
Example #6
0
        private static string nextMap(uint seed, string key, DungeonTemplate template)
        {
            var map = cachedMaps[key][0];

            cachedMaps[key].RemoveAt(0);
            logger.Info($"Generating new map for dungeon: {key}");
            Task.Factory.StartNew(() => cachedMaps[key].Add(generateNext(seed, template)));
            return(map);
        }
Example #7
0
 private static void createCache(string key, DungeonTemplate template)
 {
     //log.Info($"Generating cache for dungeon: {key}");
     cachedMaps.Add(key, new List <string>());
     for (var i = 0; i < 3; i++) //Keep at least 3 maps in cache
     {
         cachedMaps[key].Add(generateNext(0, template));
     }
 }
 private static void createCache(string key, DungeonTemplate template)
 {
     log.Info($"Generating cache for dungeon: {key}");
     cachedMaps.Add(key, new List <string>());
     for (var i = 0; i < 3; i++) //Keep at least 3 maps in cache
     {
         cachedMaps[key].Add(generateNext((uint)((long)Environment.TickCount * CryptoRandom.Next(-90000, 90000)) % uint.MaxValue, template));
     }
 }
Example #9
0
        internal DungeonGraph(DungeonTemplate template, Room[] rooms)
        {
            Template = template;

            int dx = int.MaxValue, dy = int.MaxValue;
            int mx = int.MinValue, my = int.MinValue;

            foreach (var bounds in rooms.Select(t => t.Bounds))
            {
                if (bounds.X < dx)
                {
                    dx = bounds.X;
                }
                if (bounds.Y < dy)
                {
                    dy = bounds.Y;
                }

                if (bounds.MaxX > mx)
                {
                    mx = bounds.MaxX;
                }
                if (bounds.MaxY > my)
                {
                    my = bounds.MaxY;
                }
            }

            const int Pad = 4;

            Width  = mx - dx + Pad * 2;
            Height = my - dy + Pad * 2;

            foreach (var room in rooms)
            {
                var pos = room.Pos;
                room.Pos = new Point(pos.X - dx + Pad, pos.Y - dy + Pad);

                foreach (var edge in room.Edges.Where(edge => edge.RoomA == room))
                {
                    switch (edge.Linkage.Direction)
                    {
                    case Direction.South:
                    case Direction.North:
                        edge.Linkage = new Link(edge.Linkage.Direction, edge.Linkage.Offset - dx + Pad);
                        break;

                    case Direction.East:
                    case Direction.West:
                        edge.Linkage = new Link(edge.Linkage.Direction, edge.Linkage.Offset - dy + Pad);
                        break;
                    }
                }
            }
            Rooms = rooms;
        }
Example #10
0
 private static void createCache(string key, DungeonTemplate template)
 {
     if (CheckConfig.IsDebugOn())
     {
         Console.WriteLine($"Generating cache for dungeon: {key}");
     }
     cachedMaps.Add(key, new List <string>());
     for (var i = 0; i < 3; i++) //Keep at least 3 maps in cache
     {
         cachedMaps[key].Add(generateNext(0, template));
     }
 }
Example #11
0
        public DungeonGen(int seed, DungeonTemplate template)
        {
            this.seed = seed;

            gen = new Generator(seed, template);
        }
Example #12
0
 public Generator(int seed, DungeonTemplate template)
 {
     _rand          = new Random(seed);
     this._template = template;
     Step           = GenerationStep.Initialize;
 }