예제 #1
0
        public Task GenerateForAllWorlds()
        {
            return(Task.Run(() =>
            {
                using (var scope = _serviceFactory.CreateScope())
                {
                    var context = scope.ServiceProvider.GetService <DatabaseContext>();

                    var worlds = context.Servers.Include(s => s.World)
                                 .Where(s => s.World != null)
                                 .Select(s => s.World)
                                 .ToList();

                    foreach (var world in worlds)
                    {
                        try
                        {
                            _logger.LogInformation($"Generating map for world. ID: {world.ID} Path: '{world.Path}'");

                            var worldPath = _environment.BuildPath(_pathOptions.WorldDirectory, world.Path);
                            var mapPath = _environment.BuildPath(_pathOptions.WorldDirectory, "map", world.Path);
                            var parser = _worldParserFactory.Create(worldPath);

                            if (!parser.GetRegions(TARGET_REGION).Any())
                            {
                                _logger.LogInformation($"World has no region files. Skipping. ID: {world.ID} Path: '{world.Path}'");
                                continue;
                            }

                            var fileBasedRegionCache = new FileBasedRegionCache(worldPath);
                            var renderer = _mapRendererFactory.Create2DRender(parser, fileBasedRegionCache);

                            var renderResult = renderer.GenerateBlockBitmap(TARGET_REGION);

                            renderResult.Bitmap.Save(Path.Combine(mapPath, "map.png"));

                            renderResult.Bitmap.Mutate(x => x.Resize(new Size(200, 200)));
                            renderResult.Bitmap.Save(Path.Combine(mapPath, "map_thumb.png"));

                            var mapRenderResultDataFilePath = Path.Combine(mapPath, "render-result.json");
                            File.WriteAllText(mapRenderResultDataFilePath, JsonConvert.SerializeObject(new
                            {
                                OffsetX = renderResult.OffsetX,
                                OffsetZ = renderResult.OffsetZ,
                                UnknownBlocks = renderResult.UnknownRenderEntites.OrderByDescending(x => x.Value)
                            }));

                            _logger.LogInformation($"Finished generating map for world. ID: {world.ID} Path: '{world.Path}'");
                        }
                        catch (Exception e)
                        {
                            _logger.LogError(new EventId(), e, $"An error ocurred when generating map for world. ID: {world.ID} Path: '{world.Path}' ");
                        }
                    }
                }
            }));
        }
예제 #2
0
파일: temp.cs 프로젝트: nojan1/Mineman
        public void lsdgj()
        {
            //var databaseOptions = new DbContextOptionsBuilder<DatabaseContext>()
            //    .UseInMemoryDatabase()
            //    .Options;

            //var context = new DatabaseContext(databaseOptions);

            //var serviceCollection = new ServiceCollection();
            //serviceCollection.AddTransient<DatabaseContext>(services => context);

            //var scopeFactory = new Mock<IServiceScopeFactory>();
            //scopeFactory.Setup(x => x.CreateScope())
            //    .Returns(() =>
            //    {
            //        var scope = new Mock<IServiceScope>();
            //        scope.SetupGet(s => s.ServiceProvider)
            //            .Returns(new DefaultServiceProviderFactory().CreateServiceProvider(serviceCollection));

            //        return scope.Object;
            //    });

            //var hostingEnvironment = new Mock<IHostingEnvironment>();
            //var options = new Mock<IOptions<Configuration>>();
            //options.SetupGet(x => x.Value)
            //    .Returns(new Configuration
            //    {
            //        WorldDirectory = @"C:\Users\hedlundn\Desktop\worlds\"
            //    });

            //var logger = new Mock<ILogger<WorldInfoService>>();

            //context.Servers.Add(new Common.Database.Models.Server
            //{
            //    World = new Common.Database.Models.World
            //    {
            //        Path = "604b2298e89a4733ad54f607ab83948e"
            //    }
            //});
            //context.SaveChanges();

            //var worldInfoService = new WorldInfoService(scopeFactory.Object,
            //                                            new WorldParserFactory(),
            //                                            hostingEnvironment.Object,
            //                                            options.Object,
            //                                            logger.Object);

            //worldInfoService.GenerateForAllWorlds().Wait();

            //var region = parser.GetRegions(RegionType.Overworld).First();
            //var column = region.Columns.First();
            //var blockEnties = region.Columns.SelectMany(c => c.BlockEntities).ToList();
            //var chunk = column.Chunks.First();
            //var blocks = chunk.Blocks.ToList();

            //var blocks = parser.GetRegions(RegionType.Overworld).SelectMany(r => r.Columns)
            //                           .SelectMany(c => c.Entities)
            //                           .ToList();

            var worldPath            = @"../../../../Testfiles/world";
            var parser               = new WorldParser(worldPath);
            var fileBasedRegionCache = new FileBasedRegionCache(worldPath);

            var renderer = new MapRenderer2D(parser, new TextureProvider(new WorldParsing.MapTools.Models.TextureOptions
            {
                BlockColorsFilePath = "../../../../Mineman.WorldParsing/Resources/blockcolors.json",
                BiomeColorsFilePath = "../../../../Mineman.WorldParsing/Resources/biomecolors.json"
            }), fileBasedRegionCache);

            var result = renderer.GenerateBlockBitmap(RegionType.Overworld);

            result.Bitmap.Save(@"C:\Users\hedlundn\Desktop\map-overworld.png");

            renderer.GenerateBiomeBitmap(RegionType.Overworld).Bitmap.Save(@"C:\Users\hedlundn\Desktop\map-overworld-biome.png");
        }