home *** CD-ROM | disk | FTP | other *** search
/ Chip: Shareware for Win 95 / Chip-Shareware-Win95.bin / ostatni / delphi / delphi2 / wowsrc.exe / SPRITE.PAS < prev    next >
Pascal/Delphi Source File  |  1996-01-17  |  4KB  |  105 lines

  1. unit Sprite;
  2.  
  3. interface
  4. Uses
  5.   WinTypes, WinProcs, Graphics, Classes, IniFiles, StdCtrls;
  6.  
  7. const
  8.    NULL = 0;
  9. var
  10.   imgBackground: TBitmap;
  11.   imgSave: TBitmap;
  12.   imgWork: TBitmap;
  13.   imgSeal: TBitmap;
  14.   imgMask: TBitmap;
  15.   SpriteX : Integer;
  16.  
  17. Function Initialize (MaskImage: TBitmap; Image: TBitmap): Boolean;
  18. Function MoveTo (HDc: HDC; X: Integer; Y: Integer): Boolean;
  19.  
  20. implementation
  21.  
  22. Function Initialize (MaskImage: TBitmap; Image: TBitmap): Boolean;
  23. var
  24.   DestRect : TRect;
  25.   SourceRect : TRect;
  26. begin
  27.   {Save the background}
  28.   imgBackground := TBitmap.Create;
  29.   imgSave := TBitmap.Create;
  30.   imgWork := TBitmap.Create;
  31.   imgSeal := TBitmap.Create;
  32.   imgMask := TBitmap.Create;
  33.   with imgBackground do
  34.     SourceRect := Rect(0, (imgBackground.Height - imgSave.Height),
  35.                        imgSave.Width, imgBackground.Height);
  36.   with imgSave do
  37.     begin
  38.       DestRect := Rect(0, 0, imgSave.Width, imgSave.Height);
  39.       Canvas.CopyMode :=cmSrcCopy;
  40.       Canvas.CopyRect(DestRect, imgBackground.Canvas, SourceRect);
  41.     end;
  42.   {Put up the initial image - Start with the Mask}
  43.   with imgBackground do
  44.     begin
  45.       DestRect := Rect(0, (imgBackground.Height - imgWork.Height),
  46.                        imgMask.Width, (imgBackground.Height - 4));
  47.       SourceRect := Rect(0, 0, imgMask.Width, imgMask.Height);
  48.       Canvas.CopyMode := cmSrcAnd;
  49.       Canvas.CopyRect(DestRect, imgMask.Canvas, SourceRect);
  50.                              {Finish with the image}
  51.       Canvas.CopyMode := cmSrcPaint;
  52.       Canvas.CopyRect(DestRect, imgSeal.Canvas, SourceRect);
  53.     end;
  54.   SpriteX := 0;
  55.   Result := True;
  56. End;
  57.  
  58. Function MoveTo (HDc: HDC; X: Integer; Y: Integer): Boolean;
  59. var
  60.   SRect : TRect;
  61.   DRect : TRect;
  62.   SpriteInc : Integer;
  63.   Counter : Integer;
  64. begin
  65.   SpriteInc := 1;
  66.   with imgWork do
  67.     begin
  68.       {Get the work buffer}
  69.       DRect := Rect(X, Y, imgWork.Width, imgWork.Height);
  70.       SRect := Rect(X, (imgBackground.Height - imgWork.Height),
  71.                    (X + imgWork.Width), imgBackground.Height);
  72.       Canvas.CopyMode := cmSrcCopy;
  73.       Canvas.CopyRect(DRect, imgBackground.Canvas, SRect);
  74.       {Restore background to work buffer, erasing the seal}
  75.       DRect := Rect(X, Y, imgSave.Width, imgSave.Height);
  76.       SRect := Rect(X, Y, imgSave.Width, imgSave.Height);
  77.       Canvas.CopyRect(DRect, imgSave.Canvas, SRect);
  78.       {Save the new background from the work buffer}
  79.       DRect := Rect(X, Y, imgSave.Width, imgSave.Height);
  80.       SRect := Rect(SpriteInc, Y, (imgSave.Width + SpriteInc), imgSave.Height);
  81.       imgSave.Canvas.CopyRect(DRect, imgWork.Canvas, SRect);
  82.       {Pop the Mask into the work buffer}
  83.       SRect := Rect(X, Y, imgMask.Width, imgMask.Height);
  84.       DRect := Rect(SpriteInc, Y, (imgMask.Width + SpriteInc), imgMask.Height);
  85.       Canvas.CopyMode := cmSrcAnd;
  86.       Canvas.CopyRect(DRect, imgMask.Canvas, SRect);
  87.       {Place the sprite in the mask}
  88.       SRect := Rect(X, Y, imgMask.Width, imgMask.Height);
  89.       DRect := Rect(SpriteInc, 0, (imgMask.Width + SpriteInc), imgMask.Height);
  90.       Canvas.CopyMode := cmSrcPaint;
  91.       Canvas.CopyRect(DRect, imgSeal.Canvas, SRect);
  92.       {Place the work buffer on the screen}
  93.       SRect := Rect(X, Y, imgWork.Width, imgWork.Height);
  94.       DRect := Rect(X, (imgBackground.Height - imgWork.Height),
  95.                    (X + imgWork.Width), imgBackground.Height);
  96.       imgBackground.Canvas.CopyMode := cmSrcCopy;
  97.       imgBackground.Canvas.CopyRect(DRect, imgWork.Canvas, SRect);
  98.       X := X + SpriteInc;
  99.     end;
  100.   if X > imgBackground.Width then
  101.     X := -(imgWork.Width);
  102. end;
  103.  
  104. end.
  105.