Пример #1
0
        public virtual void Dispose()
        {
            GC.SuppressFinalize(this);

            base.Dispose();
            VisibleSurfaceBind = null;

            DirectDrawing[] drawings = new DirectDrawing[DirectDrawing.Count];
            DirectDrawing.AllDirectDrawings.CopyTo(drawings, 0);

            for (int i = 0; i < drawings.GetLength(0); i++)
            {
                if (drawings[i].Surface == this)
                {
                    drawings[i].Dispose();
                }
            }
        }
Пример #2
0
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (dragging)
            {
                end = new Point(e.X, e.Y);
                Rectangle rect = new Rectangle(start, new Size(end.X - start.X, end.Y - start.Y));

                DirectRectangle directRect = (DirectRectangle)DirectDrawing.GetDirectDrawing("purple");

                if (directRect == null)
                {
                    directRect      = new DirectRectangle(Program.visSurf, rect, Color.Purple, true, 128);
                    directRect.Name = "purple";
                }
                else
                {
                    directRect.Bounds = rect;
                }

                //DirectImage directImg = new DirectImage(Program.visSurf, rect, Program.sprtBmp);
                directRect.ZOrder = 2;
                //directImg.ZOrder = 1;
            }
        }
Пример #3
0
        public virtual void Dispose()
        {
            GC.SuppressFinalize(this);

            base.Dispose();
            VisibleSurfaceBind = null;

            DirectDrawing[] drawings = new DirectDrawing[DirectDrawing.Count];
            DirectDrawing.AllDirectDrawings.CopyTo(drawings, 0);

            for (int i = 0; i < drawings.GetLength(0); i++)
            {
                if (drawings[i].Surface == this)
                    drawings[i].Dispose();
            }
        }
Пример #4
0
        static void Keyboard_KeyDown(KeyDownEventArgs e)
        {
            switch (e.KeyConfig.Key)
            {
            case Keys.Up:
                if (e.IsShift)
                {
                    //matrix.SetSourceGridPoint(new PointF(matrix.SourceGridPoint.X, matrix.SourceGridPoint.Y - (float).1));
                    matrix.VelocityY = -1;
                }
                //else
                //    //sprite.MoveSprite(sprite.GridCoordinates.X, sprite.GridCoordinates.Y - .1);
                //    sprite.SpriteMovement.VelocityY = -1;
                break;

            case Keys.Down:
                if (e.IsShift)
                {
                    //matrix.SetSourceGridPoint(new PointF(matrix.SourceGridPoint.X, matrix.SourceGridPoint.Y + (float).1));
                    matrix.VelocityY = 1;
                }
                //else
                //    //sprite.MoveSprite(sprite.GridCoordinates.X, sprite.GridCoordinates.Y + .1);
                //    sprite.SpriteMovement.VelocityY = 1;
                break;

            case Keys.Left:
                if (e.IsShift)
                {
                    //matrix.SetSourceGridPoint(new PointF(matrix.SourceGridPoint.X - (float).1, matrix.SourceGridPoint.Y));
                    matrix.VelocityX = -1;
                }
                //else
                //    //sprite.MoveSprite(sprite.GridCoordinates.X - 0.1, sprite.GridCoordinates.Y);
                //    sprite.SpriteMovement.VelocityX = -1;
                break;

            case Keys.Right:
                if (e.IsShift)
                {
                    //matrix.SetSourceGridPoint(new PointF(matrix.SourceGridPoint.X + (float).1, matrix.SourceGridPoint.Y));
                    matrix.VelocityX = 1;
                }
                //else
                //    //sprite.MoveSprite(sprite.GridCoordinates.X + 0.1, sprite.GridCoordinates.Y);
                //    sprite.SpriteMovement.VelocityX = 1;
                break;

            case Keys.A:
                matrix.Visible = true;
                break;

            case Keys.S:
                matrix.Visible = false;
                break;

            case Keys.X:
                Sprites.PauseAllAnimation(true);
                break;

            case Keys.Y:
                Sprites.PauseAllAnimation(false);
                break;

            case Keys.Escape:
                stopEngine = true;
                break;

            case Keys.Q:
                sprite.TileAnimator.StopAnimation();
                break;

            case Keys.Z:
                sprite.TileAnimator.StartAnimation();
                break;

            case Keys.D:
                sprite.Dispose();
                sprite = null;
                DirectDrawing.Clear();
                MediaFile.GetMediaFile("boom").Play();;
                break;

            case Keys.C:
                //Sprite cloned = (Sprite)sprite.Clone();
                //cloned.TileAnimator.StartAnimation("groovin");
                MediaFile.GetMediaFile("chicken").Play();
                break;

            case Keys.V:
                //MediaFile.FullScreen = !MediaFile.FullScreen;
                break;

            case Keys.B:
                //DirectDrawing.ClearAll();
                Text text = new Text(visSurf, "BEWARE THE HORNY CHICKENS",
                                     new Font("Times New Roman", 24), new Rectangle(200, 200, 700, 100),
                                     Color.Orange, Color.Transparent, TextFormatFlags.WordBreak | TextFormatFlags.HorizontalCenter);
                break;

            case Keys.W:
                matrix.WrapHorizontally = !matrix.WrapHorizontally;
                //matrix3.WrapHorizontally = !matrix3.WrapHorizontally;
                break;

            default:
                break;
            }
        }
Пример #5
0
        private static void DrawRefreshQueues()
        {
            foreach (VisibleSurfaceBase surface in VisibleSurfaces.AllVisibleSurfaces)
            {
                IBackbuffer       backbuffer = surface.Buffer;
                GridPointMatrixes grids      = backbuffer.DrawSource;

                if (grids == null || grids.Count == 0)
                {
                    // clear the entire backbuffer each pass
                    backbuffer.Erase();

                    // force refresh of all DirectDrawing objects
                    foreach (DirectDrawing drawing in DirectDrawing.AllDirectDrawings)
                    {
                        drawing.ForceRefresh();
                    }
                }
                else
                {
                    switch (grids.RefreshNeeded)
                    {
                    case MatrixesRefreshType.None:
                        // do nothing
                        return;

                    case MatrixesRefreshType.Queue:
                        // erase any DirectDrawing that intersects with a refresh area
                        foreach (DirectDrawing direct in DirectDrawing.AllDirectDrawings)
                        {
                            if (grids.BackmostVisibleLayer.RefreshQueue.AreaIntersectsRefreshArea(direct.Bounds))
                            {
                                direct.ForceRefresh();
                            }
                        }

                        // erase the existing areas in queue
                        backbuffer.Erase(grids.BackmostVisibleLayer.RefreshQueue.GetDirtyRectangles());

                        // draw from back to front from visible layers array
                        for (int i = grids.CountOfVisibleLayers - 1; i >= 0; i--)
                        {
                            surface.Buffer.DrawTiles(grids.VisibleGridPointMatrixList[i].RefreshQueue.Tiles);
                        }

                        break;

                    case MatrixesRefreshType.All:
                        // erase the entire backbuffer
                        backbuffer.Erase();

                        // force refresh of all DirectDrawing objects
                        foreach (DirectDrawing drawing in DirectDrawing.AllDirectDrawings)
                        {
                            drawing.ForceRefresh();
                        }

                        // draw from back to front from visible layers array
                        for (int i = grids.CountOfVisibleLayers - 1; i >= 0; i--)
                        {
                            // refreshing entire back buffer, so clear any partial queue...
                            grids.VisibleGridPointMatrixList[i].RefreshQueue.ClearRefreshQueue();

                            // find and add all Tile objects in range to queue
                            grids.VisibleGridPointMatrixList[i].RefreshQueue.AddPixelRangeToRefreshQueue(
                                new Rectangle(0, 0, surface.Width, surface.Height), false);

                            // draw to backbuffer
                            surface.Buffer.DrawTiles(grids.VisibleGridPointMatrixList[i].RefreshQueue.Tiles);
                        }

                        break;

                    default:
                        // shouldn't get here
                        continue;
                    }
                }

                // draw all DirectDrawing objects that overlap with dirty rectangles and are "dirty"
                DirectDrawing.RenderAll();
            }
        }