home *** CD-ROM | disk | FTP | other *** search
/ ISV Strong Games / ISV_STRONG_GAMES.iso / desktop / polysaw / !PolySaw / source / c / redraw < prev   
Text File  |  1990-07-23  |  3KB  |  132 lines

  1. /**/
  2.  
  3. #include "wimp.h"
  4. #include "wimpt.h"
  5. #include "win.h"
  6. #include "event.h"
  7. #include "baricon.h"
  8. #include "werr.h"
  9. #include "bbc.h" 
  10. #include "coords.h" 
  11. #include "resspr.h"
  12. #include <math.h>
  13. #include <stdlib.h>
  14. #include <stdio.h>
  15. #include <string.h>
  16.  
  17. #include "polysaw.h"
  18.  
  19. static void  set_up_unitpic_perm(int p, int *spr);
  20.  
  21.  
  22.  
  23. void redraw_board(wimp_w handle)
  24. {
  25. int               i, p, row, col, g;
  26. int               minr, minc, maxr, maxc;
  27. int               more;
  28. wimp_redrawstr    r;
  29. wimp_box          wrkbox;
  30. wimp_box          pcebox;
  31.  
  32. coords_pointstr   pt;
  33. char              name[12];
  34. sprite_id         sid;
  35. int               unitpic_no[16]; 
  36. sprite_factors    sprscale;
  37. sprite_pixtrans   sprcols[16];
  38.  
  39.  
  40.  
  41. sid.tag = sprite_id_name;
  42. sid.s.name = name;
  43. r.w = handle;
  44.  
  45. wimpt_noerr(wimp_redraw_wind(&r, &more));
  46. while (more)
  47.   {
  48.   wrkbox = r.g;
  49.   coords_box_toworkarea(&wrkbox, (coords_cvtstr *)&r.box);
  50.   minc = wrkbox.x0 / (2*HS);
  51.   maxr = (-wrkbox.y0) / (2*HS);
  52.   maxc = wrkbox.x1 / (2*HS);
  53.   minr = (-wrkbox.y1) / (2*HS);
  54.  
  55.   for (row=minr; row<=maxr; row++)
  56.     {
  57.     for (col=minc; col<=maxc; col++)
  58.       {
  59.       g = grid[row][col];
  60.       if (g & SQUARE_BIT)
  61.         {
  62.         sprintf(name, "0");
  63.         pt.x = 2*HS*col;
  64.         pt.y = -2*HS*row - 2*HS;
  65.         coords_point_toscreen(&pt, (coords_cvtstr *)&r.box);
  66.         wimpt_noerr(wimp_readpixtrans(resspr_area(), &sid, &sprscale, sprcols));
  67.         wimpt_noerr(sprite_put_scaled(resspr_area(), &sid, 0, pt.x, pt.y, &sprscale, sprcols));
  68.         }
  69.       else if (g & HOLE_BIT)
  70.         {
  71.         sprintf(name, "hole");
  72.         pt.x = 2*HS*col;
  73.         pt.y = -2*HS*row - 2*HS;
  74.         coords_point_toscreen(&pt, (coords_cvtstr *)&r.box);
  75.         wimpt_noerr(wimp_readpixtrans(resspr_area(), &sid, &sprscale, sprcols));
  76.         wimpt_noerr(sprite_put_scaled(resspr_area(), &sid, 0, pt.x, pt.y, &sprscale, sprcols));
  77.         }
  78.       } 
  79.     }
  80.  
  81.   for (p=0; p<nofpieces; p++)
  82.     {
  83.     pcebox.x0 = piece[p].cog.x + piece[p].box.x0;
  84.     pcebox.y0 = piece[p].cog.y + piece[p].box.y0;
  85.     pcebox.x1 = piece[p].cog.x + piece[p].box.x1;
  86.     pcebox.y1 = piece[p].cog.y + piece[p].box.y1;
  87.     if (!coords_boxesoverlap(&pcebox, &wrkbox)) 
  88.        continue;
  89.  
  90.     set_up_unitpic_perm(p, unitpic_no);
  91.  
  92.     /* plot the piece */  
  93.     for (i=0; i < piece[p].nofunits; i++)
  94.       {
  95.       sprintf(name, "%0x",  unitpic_no[ piece[p].unitpic[i] ] );      
  96.       pt.x = piece[p].cog.x + piece[p].units[i].x - HS;
  97.       pt.y = piece[p].cog.y + piece[p].units[i].y - HS;
  98.       coords_point_toscreen(&pt, (coords_cvtstr *)&r.box);
  99.       wimpt_noerr(wimp_readpixtrans(resspr_area(), &sid, &sprscale, sprcols));
  100.       wimpt_noerr(sprite_put_scaled(resspr_area(), &sid, 0, pt.x, pt.y, &sprscale, sprcols));
  101.       } 
  102.  
  103.     } /* next piece */
  104.  
  105.     wimp_get_rectangle(&r, &more);
  106.   } 
  107. }
  108.  
  109.  
  110. void  set_up_unitpic_perm(int p, int *spr)
  111. {
  112. int  rots, n, flip;
  113.  
  114. flip = piece[p].rotflipstate & 1;
  115. rots = piece[p].rotflipstate >> 1;
  116. for (n=0; n<16; n++)
  117.     {
  118.     if (flip) 
  119.         spr[n] = (n&5) | (n&2)<<2 | (n&8)>>2;
  120.     else
  121.         spr[n] = n;
  122.     }
  123.  for (n=0; n<16; n++)
  124.     spr[n] = ( spr[n]<<rots | spr[n]>>(4-rots) ) & 15;
  125. }
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.