Beispiel #1
0
        private string SaveCordonMap(Document document, string folder)
        {
            var filename = Path.ChangeExtension(document.MapFileName, ".map");
            var map      = document.Map;

            if (document.Map.Cordon)
            {
                map = new Map();
                map.WorldSpawn.EntityData = document.Map.WorldSpawn.EntityData.Clone();
                var entities = document.Map.WorldSpawn.GetAllNodesContainedWithin(document.Map.CordonBounds);
                foreach (var mo in entities)
                {
                    var clone = mo.Clone();
                    clone.SetParent(map.WorldSpawn);
                }
                var outside = new Box(map.WorldSpawn.GetChildren().Select(x => x.BoundingBox).Union(new[] { document.Map.CordonBounds }));
                outside = new Box(outside.Start - Coordinate.One, outside.End + Coordinate.One);
                var inside = document.Map.CordonBounds;

                var brush = new Brushes.BlockBrush();

                var cordon = (Solid)brush.Create(map.IDGenerator, outside, null, 0).First();
                var carver = (Solid)brush.Create(map.IDGenerator, inside, null, 0).First();
                cordon.Faces.ForEach(x => x.Texture.Name = "BLACK");

                // Do a carve (TODO: move carve into helper method?)
                foreach (var plane in carver.Faces.Select(x => x.Plane))
                {
                    Solid back, front;
                    if (!cordon.Split(plane, out back, out front, map.IDGenerator))
                    {
                        continue;
                    }
                    front.SetParent(map.WorldSpawn);
                    cordon = back;
                }

                if (document.MapFileName.EndsWith(".map"))
                {
                    filename = Path.GetFileNameWithoutExtension(filename) + "_cordon.map";
                }
            }
            map.WorldSpawn.EntityData.SetPropertyValue("wad", string.Join(";", document.GetUsedTexturePackages().Select(x => x.PackageRoot).Where(x => x.EndsWith(".wad"))));
            filename = Path.Combine(folder, filename);
            MapProvider.SaveMapToFile(filename, map);
            return(filename);
        }
Beispiel #2
0
        private string SaveCordonMap(Document document, string folder)
        {
            var filename = Path.ChangeExtension(document.MapFileName, ".map");
            var map = document.Map;
            if (document.Map.Cordon)
            {
                map = new Map();
                map.WorldSpawn.EntityData = document.Map.WorldSpawn.EntityData.Clone();
                var entities = document.Map.WorldSpawn.GetAllNodesContainedWithin(document.Map.CordonBounds);
                foreach (var mo in entities)
                {
                    var clone = mo.Clone();
                    clone.SetParent(map.WorldSpawn);
                }
                var outside = new Box(map.WorldSpawn.Children.Select(x => x.BoundingBox).Union(new[] {document.Map.CordonBounds}));
                outside = new Box(outside.Start - Coordinate.One, outside.End + Coordinate.One);
                var inside = document.Map.CordonBounds;

                var brush = new Brushes.BlockBrush();

                var cordon = (Solid) brush.Create(map.IDGenerator, outside, null, 0).First();
                var carver = (Solid) brush.Create(map.IDGenerator, inside, null, 0).First();
                cordon.Faces.ForEach(x => x.Texture.Name = "BLACK");

                // Do a carve (TODO: move carve into helper method?)
                foreach (var plane in carver.Faces.Select(x => x.Plane))
                {
                    Solid back, front;
                    if (!cordon.Split(plane, out back, out front, map.IDGenerator)) continue;
                    front.SetParent(map.WorldSpawn);
                    cordon = back;
                }

                if (document.MapFileName.EndsWith(".map"))
                {
                    filename = Path.GetFileNameWithoutExtension(filename) + "_cordon.map";
                }
            }
            map.WorldSpawn.EntityData.SetPropertyValue("wad", string.Join(";", Game.Wads.Select(x => x.Path)));
            filename = Path.Combine(folder, filename);
            MapProvider.SaveMapToFile(filename, map);
            return filename;
        }
        private void SaveWithCordon(string file)
        {
            var map = _document.Map;
            if (_document.Map.Cordon)
            {
                map = new Map();
                map.WorldSpawn.EntityData = _document.Map.WorldSpawn.EntityData.Clone();
                var entities = _document.Map.WorldSpawn.GetAllNodesContainedWithin(_document.Map.CordonBounds);
                foreach (var mo in entities)
                {
                    var clone = mo.Clone();
                    clone.SetParent(map.WorldSpawn);
                }
                var outside = new Box(map.WorldSpawn.Children.Select(x => x.BoundingBox).Union(new[] {_document.Map.CordonBounds}));
                outside = new Box(outside.Start - Coordinate.One, outside.End + Coordinate.One);
                var inside = _document.Map.CordonBounds;

                var brush = new Brushes.BlockBrush();

                var cordon = (Solid) brush.Create(map.IDGenerator, outside, null).First();
                var carver = (Solid) brush.Create(map.IDGenerator, inside, null).First();
                cordon.Faces.ForEach(x => x.Texture.Name = "BLACK");

                // Do a carve (TODO: move carve into helper method?)
                foreach (var plane in carver.Faces.Select(x => x.Plane))
                {
                    Solid back, front;
                    if (!cordon.Split(plane, out back, out front, map.IDGenerator)) continue;
                    front.SetParent(map.WorldSpawn);
                    cordon = back;
                }

            }
            MapProvider.SaveMapToFile(file, map);
        }