home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 365.lha / VSnap / frame.c < prev    next >
C/C++ Source or Header  |  1990-04-10  |  1KB  |  64 lines

  1. #include "snap.h"
  2.  
  3. IMPORT struct RastPort rp;
  4.  
  5. Point OldFrame[9];
  6. Point NewFrame[9];
  7. LONG OFType = 0;
  8. UWORD Ptrn;
  9.  
  10. STATIC VOID MultiDraw(rp, num, xy)
  11. struct RastPort *rp;
  12. LONG num;
  13. Point *xy;
  14. {
  15.     REGISTER LONG i = 0;
  16.     REGISTER Point *coord = xy;
  17.     while (i<num) {
  18.         Move(rp, (LONG)coord->x, (LONG)coord->y);
  19.         coord++;
  20.         Draw(rp, (LONG)coord->x, (LONG)coord->y);
  21.         i++;
  22.     }
  23. }
  24.  
  25. VOID crawl_frame(dir)
  26. LONG dir;
  27. {
  28.     REGISTER UWORD temp = Ptrn;
  29.     if (dir) {
  30.         Ptrn = ((Ptrn<<1) & 0xfffe) | ((Ptrn & 0x8000)>>15);
  31.     } else {
  32.         Ptrn = ((Ptrn>>1) & 0x7fff) | ((Ptrn & 1)<<15);
  33.     }        
  34.     temp ^= Ptrn;
  35.     SetDrPt(&rp, temp);
  36.     MultiDraw(&rp, OFType, &OldFrame[0]);
  37.     SetDrPt(&rp, Ptrn);
  38. }
  39.  
  40. VOID erase_frame()
  41. {
  42.     if (OFType) {
  43.         MultiDraw(&rp, OFType, &OldFrame[0]);
  44.         OFType = 0;
  45.     }
  46. }
  47.  
  48. VOID draw_frame(ft)
  49. LONG ft;
  50. {
  51.     REGISTER LONG i;
  52.       /* Remove old frame */
  53.     WaitTOF();
  54.     erase_frame();
  55.       /* Draw the new frame */
  56.     MultiDraw(&rp, ft, &NewFrame[0]);
  57.       /* save the frame for erasing later */
  58.     for (i=0; i<=ft; i++) {
  59.         OldFrame[i].x = NewFrame[i].x;
  60.         OldFrame[i].y = NewFrame[i].y;
  61.     }
  62.     OFType = ft;
  63. }
  64.