void Render() { Text = "Screen Browser [" + BaseIndex.ToString("x") + " - " + Math.Min(BaseIndex + 15, Level.Screens.Count - 1).ToString("x") + "]"; gBuffer.Clear(Color.Black); gBuffer.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear; gBuffer.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; renderer.Level = this.Level; //renderer.ApplyPalette(blitterBuffer, UseAlternatePalette); //var pal = blitterBuffer.Palette; //if (UseAlternatePalette) { // Level.BgAltPalette.ApplyTable(pal.Entries,0); // Level.BgAltPalette.ApplyTable(pal.Entries, 16); // Level.SpriteAltPalette.ApplyTable(pal.Entries, 32); //} else { // Level.BgPalette.ApplyTable(pal.Entries, 0); // Level.BgPalette.ApplyTable(pal.Entries, 16); // Level.SpritePalette.ApplyTable(pal.Entries, 32); //} //blitterBuffer.Palette = pal; ScreenEditor.ApplyPalette(UseAlternatePalette, Level, blitterBuffer, HighlightEffect.Invert); for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { int index = BaseIndex + x + y * 4; if (index < Level.Screens.Count) { var screen = Level.Screens[index]; renderer.SelectedEnemy = -1; renderer.SelectedDoor = -1; renderer.DefaultPalette = screen.ColorAttributeTable; renderer.Clear(); renderer.DrawScreen(index); renderer.Render(blitter, blitterBuffer, screen.Enemies, screen.Doors, ShowPhysics); Rectangle source = new Rectangle(0, 0, 256, 240); Rectangle dest = new Rectangle(cellPadding + cellSpacingX * x, cellPadding + cellSpacingY * y, cellWidth, cellHeight); gBuffer.DrawImage(blitterBuffer, dest, source, GraphicsUnit.Pixel); if (index == HighlightedScreen) { dest.Inflate(2, 2); gBuffer.DrawRectangle(SystemPens.Highlight, dest); dest.Inflate(1, 1); gBuffer.DrawRectangle(SystemPens.Highlight, dest); } } } } }
private void RenderStructures() { Text = "Structure Browser [" + BaseIndex.ToString("x2") + "-" + Math.Min(Level.Structures.Count - 1, BaseIndex + 15).ToString("x2") + "]"; this.gStructimg.Clear(Color.Black); Bitmap img; bool palApplied = false; for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { int index = BaseIndex + x + y * 4; if (index < Level.Structures.Count) { int structWidth, structHeight; img = renderer.RenderSingleStructure(Level, index, Palette, out structWidth, out structHeight); if (!palApplied) { var pal = img.Palette; if (UseAlternatePalette) { Level.BgAltPalette.ApplyTable(pal.Entries); } else { Level.BgPalette.ApplyTable(pal.Entries); } img.Palette = pal; palApplied = true; } Rectangle source = new Rectangle(0, 0, structWidth * structTileWidth, structHeight * structTileHeight); Rectangle dest = new Rectangle(x * structCellSpacingX + 8, y * structCellSpacingY + 8, source.Width, source.Height); // Structs will be scaled down if larger that 64 px if (structWidth > structCellWidth_Tiles || structHeight > structCellHeight_Tiles) { source = new Rectangle(0, 0, structTileWidth * structWidth, structTileHeight * structHeight); float scaleX = (float)structCellWidth_Tiles / (float)structWidth; float scaleY = (float)structCellHeight_Tiles / (float)structHeight; // Whether scale is based on width or height depends on which is greater if (scaleX > scaleY) // Taller { dest = new Rectangle(dest.X, dest.Y, (int)(source.Width * scaleY), (int)(source.Height * scaleY)); // center (height - width) adjusted for scale and halved // Note that this assumes the cells are square dest.X += (int)((source.Height - source.Width) * scaleY / 2); } else // Wider { dest = new Rectangle(dest.X, dest.Y, (int)(source.Width * scaleX), (int)(source.Height * scaleX)); // center (width - height) adjusted for scale and halved // Note that this assumes the cells are square dest.Y += (int)((source.Width - source.Height) * scaleX / 2); } } else { // Otherwise, just center dest.X += (structCellWidth - source.Width) / 2; dest.Y += (structCellHeight - source.Height) / 2; } // Draw selection gStructimg.DrawImage(img, dest, source, GraphicsUnit.Pixel); if (index == HighlightedIndex) { var selectionRect = dest; selectionRect.X -= 2; selectionRect.Y -= 2; selectionRect.Width += 4; selectionRect.Height += 4; gStructimg.DrawRectangle(SystemPens.Highlight, selectionRect); } } } } }