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(); } } }
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; } }
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(); } }
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; } }
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(); } }