public void WriteLegend(ConfigLayer layer)
        {
            Bitmap   bmp = new Bitmap(512, 90);
            Graphics g   = Graphics.FromImage(bmp);

            g.SmoothingMode     = SmoothingMode.AntiAlias;
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.PixelOffsetMode   = PixelOffsetMode.HighQuality;
            g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

            var fontObject = new Font(font, 12);

            using (var brush = new SolidBrush(backgroundColor))
            {
                var walkSize    = g.MeasureString(Strings.Walkable, fontObject);
                var notWalkSize = g.MeasureString(Strings.NotWalkable, fontObject);
                var boxWidth    = Math.Max(walkSize.Width, notWalkSize.Width); // get larger

                g.FillRectangle(brush, 0, 0, boxWidth + 32, 90);
            }

            g.DrawRectangle(new Pen(WalkableColor, 10), 10, 10, 10, 10);
            g.DrawString(Strings.Walkable, fontObject, new SolidBrush(textColor), 30, 6);

            g.DrawRectangle(new Pen(NotWalkableColor, 10), 10, 34, 10, 10);
            g.DrawString(Strings.NotWalkable, fontObject, new SolidBrush(textColor), 30, 30);

            g.DrawString(String.Format(Strings.XSize, layer.X), fontObject, new SolidBrush(textColor), 2, 52);
            g.DrawString(String.Format(Strings.YSize, layer.Y), fontObject, new SolidBrush(textColor), 2, 70);

            g.Flush();

            collisionPicture.Image = bmp;
        }
Beispiel #2
0
        private static string GetLayerPath(ConfigLayer Layer, string PlatformExtensionName, string IniPlatformName, DirectoryReference ProjectDir, string BaseIniName,
                                           out bool bHasPlatformTag, out bool bHasProjectTag, out bool bHasExpansionTag)
        {
            // cache some platform extension information that can be used inside the loops
            string PlatformExtensionEngineConfigDir  = DirectoryReference.Combine(UnrealBuildTool.EnginePlatformExtensionsDirectory, PlatformExtensionName).FullName;
            string PlatformExtensionProjectConfigDir = ProjectDir != null?DirectoryReference.Combine(UnrealBuildTool.ProjectPlatformExtensionsDirectory(ProjectDir), PlatformExtensionName).FullName : null;

            bool bHasPlatformExtensionEngineConfigDir  = Directory.Exists(PlatformExtensionEngineConfigDir);
            bool bHasPlatformExtensionProjectConfigDir = PlatformExtensionProjectConfigDir != null && Directory.Exists(PlatformExtensionProjectConfigDir);

            bHasPlatformTag  = Layer.Path.Contains("{PLATFORM}");
            bHasProjectTag   = Layer.Path.Contains("{PROJECT}");
            bHasExpansionTag = Layer.Path.Contains("{ED}") || Layer.Path.Contains("{EF}");
            bool bHasUserTag = Layer.Path.Contains("{USER}");

            // skip platform layers if we are "platform-less", or user layers without a user dir
            if ((bHasPlatformTag && IniPlatformName == "None") ||
                (bHasProjectTag && ProjectDir == null) ||
                (bHasUserTag && GetUserDir() == null))
            {
                return(null);
            }

            // basic replacements
            string LayerPath;

            // you can only have PROJECT or ENGINE, not both
            if (bHasProjectTag)
            {
                if (bHasPlatformTag && bHasPlatformExtensionProjectConfigDir)
                {
                    LayerPath = Layer.ExtProjectPath.Replace("{EXTPROJECT}", PlatformExtensionProjectConfigDir);
                }
                else
                {
                    LayerPath = Layer.Path.Replace("{PROJECT}", ProjectDir.FullName);
                }
            }
            else
            {
                if (bHasPlatformTag && bHasPlatformExtensionEngineConfigDir)
                {
                    LayerPath = Layer.ExtEnginePath.Replace("{EXTENGINE}", PlatformExtensionEngineConfigDir);
                }
                else
                {
                    LayerPath = Layer.Path.Replace("{ENGINE}", UnrealBuildTool.EngineDirectory.FullName);
                }
            }
            LayerPath = LayerPath.Replace("{TYPE}", BaseIniName);
            LayerPath = LayerPath.Replace("{USERSETTINGS}", Utils.GetUserSettingDirectory().FullName);
            LayerPath = LayerPath.Replace("{USER}", GetUserDir());

            return(LayerPath);
        }
        public void LoadType2(ConfigLayer layer)
        {
            var iTotal = 0;

            Bitmap pic = new Bitmap(layer.X, layer.Y);

            for (int iY = 0; iY < layer.Y; iY++)
            {
                for (int iX = 0; iX < layer.X; iX++)
                {
                    pic.SetPixel(iX, iY, layer.Data[iTotal] == 0x0 ? Color.FromArgb(100, 200, 0, 0) : Color.FromArgb(0, 0, 0, 0));
                    iTotal++;
                }
            }

            type2Picture.BackgroundImage = pic;
        }
        public void LoadCollisionData(ConfigLayer layer)
        {
            WriteLegend(layer);

            var iTotal = 0;

            Bitmap collision = new Bitmap(layer.X, layer.Y);

            for (int iY = 0; iY < layer.Y; iY++)
            {
                for (int iX = 0; iX < layer.X; iX++)
                {
                    collision.SetPixel(iX, iY, layer.Data[iTotal] == 0x0 ? WalkableColor : NotWalkableColor);
                    iTotal++;
                }
            }

            collisionPicture.BackgroundImage = collision;
        }
Beispiel #5
0
        public static MapDataInfo Load(BinaryReader reader)
        {
            var mapData = new MapDataInfo();

            var signature = Encoding.ASCII.GetString(reader.ReadBytes(4));

            if (signature != "MDN_")
            {
                throw new InvalidDataException(Strings.InvalidMapFileError);
            }

            mapData.Version        = reader.ReadInt32();
            mapData.TileBpp        = reader.ReadInt32();
            mapData.Param3         = reader.ReadInt32();
            mapData.Param4         = reader.ReadInt32();
            mapData.MapSizeSum     = reader.ReadInt32();
            mapData.Param6         = reader.ReadInt32();
            mapData.Param7         = reader.ReadInt32();
            mapData.MapSizeX       = reader.ReadInt32();
            mapData.MapSizeY       = reader.ReadInt32();
            mapData.TileSizeX      = reader.ReadInt32();
            mapData.TileSizeY      = reader.ReadInt32();
            mapData.TileCountX     = reader.ReadInt32();
            mapData.TileCountY     = reader.ReadInt32();
            mapData.Param14        = reader.ReadInt32();
            mapData.LyrDataCount   = reader.ReadInt32();
            mapData.TileGroupCount = reader.ReadInt32();

            var layerCount = reader.ReadInt32();

            Console.WriteLine("layerCount = {0}", layerCount);

            var rangeCount = reader.ReadInt32();

            Console.WriteLine("rangeCount = {0}", rangeCount);

            var pointCount = reader.ReadInt32();

            Console.WriteLine("pointCount = {0}", pointCount);

            var effectCount = reader.ReadInt32();

            Console.WriteLine("effectCount = {0}", effectCount);

            mapData.Param21 = reader.ReadInt32();
            mapData.Param22 = reader.ReadInt32();
            mapData.Param23 = reader.ReadInt32();

            for (var i = 0; i < layerCount; i++)
            {
                var layer = new ConfigLayer()
                {
                    Type = reader.ReadInt32(),
                    X    = reader.ReadInt32(),
                    Y    = reader.ReadInt32(),
                    BppX = reader.ReadInt32(),
                    BppY = reader.ReadInt32()
                };

                layer.Data = reader.ReadBytes(layer.X * layer.Y);

                Console.WriteLine("X: {0} / Y: {1} / Total length: {2} ( {2:X} )", layer.X, layer.Y, layer.X * layer.Y);
                Console.WriteLine("Type: {0}", layer.Type);
                Console.WriteLine("Config layer {0} length: {1:X}", i + 1, layer.Data.Length);

                mapData.ConfigLayers.Add(layer);
            }

            Console.WriteLine("Reading rangeData");

            var rangeData = reader.ReadBytes(32 * rangeCount);

            for (var i = 0; i < rangeCount; i++)
            {
                var obj = rangeData.Skip(i * 32).Take(32).ToArray();

                using (var range = new BinaryReader(new MemoryStream(obj)))
                {
                    mapData.RangeObjects.Add(new RangeObject()
                    {
                        Type        = range.ReadInt32(),
                        Id          = range.ReadInt32(),
                        Destination = range.ReadInt32(),
                        X1          = range.ReadInt32(),
                        Y1          = range.ReadInt32(),
                        X2          = range.ReadInt32(),
                        Y2          = range.ReadInt32(),
                        Options     = range.ReadInt32()
                    });
                }
            }

            Console.WriteLine("Reading pointData");

            var pointData = reader.ReadBytes(24 * pointCount);

            for (var i = 0; i < pointCount; i++)
            {
                var pointBytes = pointData.Skip(i * 24).Take(24).ToArray();

                using (var pointReader = new BinaryReader(new MemoryStream(pointBytes)))
                {
                    mapData.PointObjects.Add(new PointObject()
                    {
                        Id      = pointReader.ReadInt32(),
                        Type    = pointReader.ReadInt32(),
                        MapId   = pointReader.ReadInt32(),
                        X       = pointReader.ReadInt32(),
                        Y       = pointReader.ReadInt32(),
                        Options = pointReader.ReadInt32()
                    });
                }
            }


            Console.WriteLine("Reading effectData");

            var effectData = reader.ReadBytes(52 * effectCount);

            for (int i = 0; i < effectCount; i++)
            {
                var effect = effectData.Skip(i * 52).Take(52).ToArray();
                mapData.EffectObjects.Add(effect);
                Console.WriteLine(ByteArrayToString(effect));
            }

            return(mapData);
        }
Beispiel #6
0
        public static MapDataInfo Load(BinaryReader reader)
        {
            var mapData = new MapDataInfo();

            var signature = Encoding.ASCII.GetString(reader.ReadBytes(4));

            if (signature != "MDN_")
            {
                throw new InvalidDataException("Invalid map file");
            }

            mapData.Version        = reader.ReadInt32();
            mapData.TileBpp        = reader.ReadInt32();
            mapData.Param3         = reader.ReadInt32();
            mapData.Param4         = reader.ReadInt32();
            mapData.MapSizeSum     = reader.ReadInt32();
            mapData.Param6         = reader.ReadInt32();
            mapData.Param7         = reader.ReadInt32();
            mapData.MapSizeX       = reader.ReadInt32();
            mapData.MapSizeY       = reader.ReadInt32();
            mapData.TileSizeX      = reader.ReadInt32();
            mapData.TileSizeY      = reader.ReadInt32();
            mapData.TileCountX     = reader.ReadInt32();
            mapData.TileCountY     = reader.ReadInt32();
            mapData.Param14        = reader.ReadInt32();
            mapData.LyrDataCount   = reader.ReadInt32();
            mapData.TileGroupCount = reader.ReadInt32();

            var layerCount = reader.ReadInt32();

            var rangeCount = reader.ReadInt32();

            var pointCount = reader.ReadInt32();

            var effectCount = reader.ReadInt32();

            mapData.Param21 = reader.ReadInt32();
            mapData.Param22 = reader.ReadInt32();
            mapData.Param23 = reader.ReadInt32();

            for (var i = 0; i < layerCount; i++)
            {
                var layer = new ConfigLayer()
                {
                    Type = reader.ReadInt32(),
                    X    = reader.ReadInt32(),
                    Y    = reader.ReadInt32(),
                    BppX = reader.ReadInt32(),
                    BppY = reader.ReadInt32()
                };

                layer.Data = reader.ReadBytes(layer.X * layer.Y);

                mapData.ConfigLayers.Add(layer);
            }

            var rangeData = reader.ReadBytes(32 * rangeCount);

            for (var i = 0; i < rangeCount; i++)
            {
                var obj = rangeData.Skip(i * 32).Take(32).ToArray();

                using (var range = new BinaryReader(new MemoryStream(obj)))
                {
                    mapData.RangeObjects.Add(new RangeObject()
                    {
                        Type        = range.ReadInt32(),
                        Id          = range.ReadInt32(),
                        Destination = range.ReadInt32(),
                        X1          = range.ReadInt32(),
                        Y1          = range.ReadInt32(),
                        X2          = range.ReadInt32(),
                        Y2          = range.ReadInt32(),
                        Options     = range.ReadInt32()
                    });
                }
            }

            var pointData = reader.ReadBytes(24 * pointCount);

            for (var i = 0; i < pointCount; i++)
            {
                var pointBytes = pointData.Skip(i * 24).Take(24).ToArray();

                using (var pointReader = new BinaryReader(new MemoryStream(pointBytes)))
                {
                    mapData.PointObjects.Add(new PointObject()
                    {
                        Id      = pointReader.ReadInt32(),
                        Type    = pointReader.ReadInt32(),
                        MapId   = pointReader.ReadInt32(),
                        X       = pointReader.ReadInt32(),
                        Y       = pointReader.ReadInt32(),
                        Options = pointReader.ReadInt32()
                    });
                }
            }

            /*
             * var effectData = reader.ReadBytes(52 * effectCount);
             *
             * for (int i = 0; i < effectCount; i++)
             * {
             *  var effect = effectData.Skip(i * 52).Take(52).ToArray();
             *  mapData.EffectObjects.Add(effect);
             * }
             */

            reader.Dispose();

            return(mapData);
        }