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; }
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; }
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); }
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); }