private void WriteFrameInfo(List <WrittenImageInfo> imageInfos, GafFrameInfo info) { var header = new Structures.GafFrameInfo { Unknown2 = 0, Unknown3 = (uint)info.Unknown3, // Cavedog gafs sometimes have a value here but we don't know what it does. }; if (info.ImageIndex.HasValue) { var imageInfo = imageInfos[info.ImageIndex.Value]; header.LayerCount = 0; header.OriginX = (short)info.OriginX; header.OriginY = (short)info.OriginY; header.Width = (ushort)imageInfo.Width; header.Height = (ushort)imageInfo.Height; header.Compressed = true; header.TransparencyIndex = (byte)imageInfo.TransparencyIndex; header.PtrFrameData = (uint)imageInfo.Pointer; } else { var rect = info.Layers.Select(layer => new Rect { X = -layer.OriginX, Y = -layer.OriginY, Width = imageInfos[layer.ImageIndex].Width, Height = imageInfos[layer.ImageIndex].Height }).Aggregate(Rect.Merge); header.LayerCount = (ushort)info.Layers.Count; header.OriginX = (short)(-rect.X); header.OriginY = (short)(-rect.Y); header.Width = (ushort)rect.Width; header.Height = (ushort)rect.Height; header.Compressed = false; header.TransparencyIndex = 9; header.PtrFrameData = (uint)(writer.BaseStream.Position + 24); } header.Write(writer); if (!info.ImageIndex.HasValue) { var startPos = writer.BaseStream.Position + (4 * info.Layers.Count); for (var i = 0; i < info.Layers.Count; ++i) { writer.Write((uint)(startPos + (24 * i))); } var layerPointers = new List <long>(); foreach (var layer in info.Layers) { WriteLayerInfo(imageInfos, layer); } } }
private void WriteLayerInfo(List <WrittenImageInfo> imageInfos, GafLayerInfo info) { var imageInfo = imageInfos[info.ImageIndex]; var header = new Structures.GafFrameInfo { OriginX = (short)info.OriginX, OriginY = (short)info.OriginY, Unknown2 = 0, Unknown3 = (uint)info.Unknown3, // Cavedog gafs sometimes have a value here but we don't know what it does. LayerCount = 0, Width = (ushort)imageInfo.Width, Height = (ushort)imageInfo.Height, Compressed = true, TransparencyIndex = (byte)imageInfo.TransparencyIndex, PtrFrameData = (uint)imageInfo.Pointer, }; header.Write(writer); }