public InfoWindow(GM1FileHeader.DataType dataType) { this.InitializeComponent(); #if DEBUG this.AttachDevTools(); #endif StackPanel animation = this.Get <StackPanel>("Animation"); animation.IsVisible = false; StackPanel interfaceS = this.Get <StackPanel>("Interface"); interfaceS.IsVisible = false; StackPanel tiledObject = this.Get <StackPanel>("TiledObject"); tiledObject.IsVisible = false; StackPanel noInfo = this.Get <StackPanel>("NoInfo"); noInfo.IsVisible = false; switch (dataType) { case GM1FileHeader.DataType.Animations: animation.IsVisible = true; break; case GM1FileHeader.DataType.Interface: interfaceS.IsVisible = true; break; case GM1FileHeader.DataType.TilesObject: tiledObject.IsVisible = true; break; case GM1FileHeader.DataType.Font: noInfo.IsVisible = true; break; case GM1FileHeader.DataType.NOCompression: noInfo.IsVisible = true; break; case GM1FileHeader.DataType.TGXConstSize: noInfo.IsVisible = true; break; case GM1FileHeader.DataType.NOCompression1: noInfo.IsVisible = true; break; default: break; } }
internal static List <TGXImage> ConvertImgToTiles(List <ushort> list, ushort width, ushort height, List <TGXImage> oldList) { if (Logger.Loggeractiv) { Logger.Log("ConvertImgToTiles"); } List <TGXImage> newImageList = new List <TGXImage>(); //calculate Parts one part 16 x 30 int partwidth = width / 30;//todo not exactly 30 width because 2 pixels between(can ignored because Church bigest tiledImage and work) int totalTiles = partwidth; int dummy = 0; for (int i = 0; 0 != totalTiles; i++) { totalTiles--; dummy += totalTiles; } totalTiles = dummy * 2 + partwidth; int savedOffsetX = width / 2; int xOffset = savedOffsetX; int yOffset = height - 16; int partsPerLine = 1; int counter = 0; List <Byte> arrayByte; bool halfreached = false; datatype = GM1FileHeader.DataType.TilesObject; for (int part = 0; part < totalTiles; part++) { counter++; int x = 0; int y = 0; arrayByte = new List <byte>(); for (int i = 0; i < 16; i++) { for (int j = 0; j < array[i]; j++) { int number = ((width * (y + yOffset)) + x + xOffset - array[i] / 2); var color = list[number]; arrayByte.AddRange(BitConverter.GetBytes(color)); x++; list[number] = 32767; } y++; x = 0; } if (part == 3 || part == 5) { } var newImage = new TGXImage(); newImage.Direction = 0; newImage.Height = 16; newImage.Width = 30; //newImage.OffsetX = (ushort)(xOffset + XOffsetBefore); //newImage.OffsetY = (ushort)(yOffset + YOffsetBefore); newImage.SubParts = (byte)totalTiles; newImage.ImagePart = (byte)part; if (totalTiles == 1) { halfreached = true; } if (halfreached) { //tileoffset=1st pixel from tile and than height if (counter == 1)//left { if (part == totalTiles - 1) { newImage.BuildingWidth = 30; newImage.Direction = 1; int imageOnTopwidth = 30; int imageOnTopheight = yOffset + 7; int imageOnTopOffsetX = xOffset - 15; List <ushort> colorListImgOnTop = GetColorList(list, imageOnTopwidth, imageOnTopheight, imageOnTopOffsetX, width); if (colorListImgOnTop.Count != 0) { var byteArrayImgonTop = ImgToGM1ByteArray(colorListImgOnTop, imageOnTopwidth, colorListImgOnTop.Count / imageOnTopwidth, 1); arrayByte.AddRange(byteArrayImgonTop); newImage.TileOffset = (ushort)(colorListImgOnTop.Count / imageOnTopwidth + 10 - 16 - 1); if (newImage.TileOffset == ushort.MaxValue) { newImage.TileOffset = 0; } newImage.Height = (ushort)(colorListImgOnTop.Count / imageOnTopwidth + 9); } } else { newImage.BuildingWidth = 16; newImage.Direction = 2; int imageOnTopwidth = 16; int imageOnTopheight = yOffset + 7; int imageOnTopOffsetX = xOffset - 15; List <ushort> colorListImgOnTop = GetColorList(list, imageOnTopwidth, imageOnTopheight, imageOnTopOffsetX, width); if (colorListImgOnTop.Count != 0) { var byteArrayImgonTop = ImgToGM1ByteArray(colorListImgOnTop, imageOnTopwidth, colorListImgOnTop.Count / imageOnTopwidth, 1); arrayByte.AddRange(byteArrayImgonTop); newImage.TileOffset = (ushort)(colorListImgOnTop.Count / imageOnTopwidth + 10 - 16 - 1); if (newImage.TileOffset == ushort.MaxValue) { newImage.TileOffset = 0; } newImage.Height = (ushort)(colorListImgOnTop.Count / imageOnTopwidth + 9); } } } else if (counter == partsPerLine)//right { newImage.BuildingWidth = 16; newImage.Direction = 3; int imageOnTopwidth = 16; int imageOnTopheight = yOffset + 7; int imageOnTopOffsetX = xOffset; List <ushort> colorListImgOnTop = GetColorList(list, imageOnTopwidth, imageOnTopheight, imageOnTopOffsetX - 1, width); if (colorListImgOnTop.Count != 0) { var byteArrayImgonTop = ImgToGM1ByteArray(colorListImgOnTop, imageOnTopwidth, colorListImgOnTop.Count / imageOnTopwidth, 1); arrayByte.AddRange(byteArrayImgonTop); newImage.Height = (ushort)(colorListImgOnTop.Count / imageOnTopwidth + 9); newImage.TileOffset = (ushort)(colorListImgOnTop.Count / imageOnTopwidth + 10 - 16 - 1); if (newImage.TileOffset == ushort.MaxValue) { newImage.TileOffset = 0; } } newImage.HorizontalOffsetOfImage = 14; } } newImageList.Add(newImage); newImage.ImgFileAsBytearray = arrayByte.ToArray(); xOffset += 32; if (counter == partsPerLine) { yOffset -= 8; counter = 0; xOffset = savedOffsetX; if (partsPerLine == partwidth - 1 && !halfreached) { halfreached = true; partsPerLine += 2; xOffset = -1; } if (!halfreached) { partsPerLine++; xOffset -= 16; } else { xOffset += 16; partsPerLine--; } savedOffsetX = xOffset; } } XOffsetBefore += width; if (height > biggestHeight) { biggestHeight = height; } if (XOffsetBefore > 4000) { XOffsetBefore = 0; YOffsetBefore += biggestHeight; } return(newImageList); }