private static void WriteOldStyleViewFrame(BinaryWriter writer, ViewFrame frame) { Bitmap bmp = Factory.NativeProxy.GetBitmapForSprite(frame.Image); int colDepth = GetColorDepthForPixelFormat(bmp.PixelFormat); writer.Write(colDepth); int spriteFlags = 0; if (bmp.PixelFormat == PixelFormat.Format32bppArgb) { spriteFlags |= SPRITE_FLAG_ALPHA_CHANNEL; } writer.Write((byte)spriteFlags); writer.Write(bmp.Width); writer.Write(bmp.Height); Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, bmp.PixelFormat); int memoryAddress = bmpData.Scan0.ToInt32(); for (int y = 0; y < bmp.Height; y++) { byte[] line = new byte[bmp.Width * ((colDepth + 1) / 8)]; Marshal.Copy(new IntPtr(memoryAddress), line, 0, line.Length); writer.Write(line); memoryAddress += bmpData.Stride; } bmp.UnlockBits(bmpData); bmp.Dispose(); }
private static Sprite ReadOldStyleViewFrame(BinaryReader reader, ViewLoop loop, ViewFrame frame, Color[] palette) { int colDepth = reader.ReadInt32(); if (colDepth == 200) { loop.RunNextLoop = true; loop.Frames.Remove(frame); return null; } int spriteFlags = reader.ReadByte(); int width = reader.ReadInt32(); int height = reader.ReadInt32(); byte[] spriteData = reader.ReadBytes(width * height * ((colDepth + 1) / 8)); Sprite newSprite = ImportSpriteFromRawData(colDepth, width, height, (spriteFlags & SPRITE_FLAG_ALPHA_CHANNEL) != 0, spriteData, palette); if ((spriteFlags & SPRITE_FLAG_HI_RES) != 0) { newSprite.Resolution = SpriteImportResolution.HighRes; } return newSprite; }
private void AssignSpritesToView(List<int> spriteNumbers, AssignToView dialog) { int loop = dialog.LoopNumber; if (dialog.ReverseFrames) { spriteNumbers.Reverse(); } AGS.Types.View view = Factory.AGSEditor.CurrentGame.FindViewByID(dialog.ViewNumber); if (view == null) { Factory.GUIController.ShowMessage("The view number you selected (" + dialog.ViewNumber + ") does not exist.", MessageBoxIcon.Warning); return; } while (loop >= view.Loops.Count) { view.AddNewLoop(); } if (!dialog.AddFramesToExistingLoop) { view.Loops[loop].Frames.Clear(); } foreach (int spriteNum in spriteNumbers) { if (view.Loops[loop].Full) { if (!dialog.ContinueIntoNextLoop) { Factory.GUIController.ShowMessage("The selected loop is now full. Not all the selected sprites were assigned.", MessageBoxIcon.Information); view.NotifyClientsOfUpdate(); return; } loop++; if (loop >= view.Loops.Count) { view.AddNewLoop(); } view.Loops[loop - 1].RunNextLoop = true; } ViewFrame newFrame = new ViewFrame(); newFrame.ID = view.Loops[loop].Frames.Count; newFrame.Image = spriteNum; if (dialog.FlipFrames) { newFrame.Flipped = true; } view.Loops[loop].Frames.Add(newFrame); } Factory.GUIController.ShowMessage("The selected sprites were assigned successfully.", MessageBoxIcon.Information); view.NotifyClientsOfUpdate(); }
private static View ReadOldStyleView(BinaryReader reader, Game game, SpriteFolder folder, Color[] palette) { View view = new View(); int i; int numLoops = reader.ReadInt16(); int[] numFrames = new int[numLoops]; for (i = 0; i < numLoops; i++) { view.AddNewLoop(); numFrames[i] = reader.ReadInt16(); } if (numLoops < 16) { reader.ReadBytes((16 - numLoops) * 2); } reader.ReadBytes(16 * 4 + 2); for (i = 0; i < 16; i++) { for (int j = 0; j < 20; j++) { ViewFrame frame = new ViewFrame(); frame.ID = j; frame.Image = reader.ReadInt32(); reader.ReadInt32(); frame.Delay = reader.ReadInt16(); reader.ReadBytes(2); frame.Flipped = (reader.ReadInt32() == 1); frame.Sound = reader.ReadInt32(); reader.ReadBytes(8); if ((i < numLoops) && (j < numFrames[i])) { view.Loops[i].Frames.Add(frame); } } } foreach (ViewLoop loop in view.Loops) { foreach (ViewFrame frame in loop.Frames) { Sprite newSprite = ReadOldStyleViewFrame(reader, loop, frame, palette); if (newSprite == null) { break; } folder.Sprites.Add(newSprite); frame.Image = newSprite.Number; } } return view; }
private void InsertNewFrame(int afterIndex) { if (afterIndex < 0) afterIndex = -1; if (afterIndex >= _loop.Frames.Count) afterIndex = _loop.Frames.Count - 1; foreach (ViewFrame frame in _loop.Frames) { if (frame.ID > afterIndex) { frame.ID++; } } ViewFrame newFrame = new ViewFrame(); newFrame.ID = afterIndex + 1; _loop.Frames.Insert(afterIndex + 1, newFrame); UpdateControlWidth(); if (NewFrameAdded != null) { NewFrameAdded(_loop, newFrame.ID); } ChangeSelectedFrame(newFrame.ID); }