예제 #1
0
        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);
                        }
                    }
                }
            }
        }
예제 #2
0
        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);
                        }
                    }
                }
            }
        }