home *** CD-ROM | disk | FTP | other *** search
/ ISV Strong Games / ISV_STRONG_GAMES.iso / desktop / polysaw / !PolySaw / source / h / polysaw
Text File  |  1992-03-04  |  3KB  |  94 lines

  1.  
  2. #include <stdio.h>
  3. #include "coords.h"
  4. #include "wimp.h"
  5.  
  6. /******************************* CONSTANTS *****************************/
  7.  
  8.  
  9. #define HS 20   /* Half the length of a Side of a square */
  10. #define MAX_BOARD 32   /* side of main board in units of 2*HS */
  11. #define MAX_PIECES 40
  12. #define MAX_SQUARES 20
  13.  
  14. #define SQUARE_BIT 1
  15. #define HOLE_BIT 2
  16. #define PIECE_BIT 4
  17.  
  18.  
  19. /**************************** STRUCTS ***************************/
  20.  
  21.  
  22. typedef struct {
  23. int             nofunits;
  24. coords_pointstr cog;                    /* centre of gravity to nearest HS */
  25. coords_pointstr units[MAX_SQUARES];     /* square centres rel. to cog */
  26. int             unitpic[MAX_SQUARES];   /* initial sprite number 0-15 */
  27. int             rotflipstate;           /* 2*(no of 1/4 turns) + (0 or 1) */
  28. wimp_box        box;                /* bounding box (for any orientation) */
  29. int             movespin_rad;       /* for splitting drags into move/spin */
  30. } Polymo;
  31.  
  32.  
  33. typedef struct {
  34. int              kind;          /* 0 = not dragging, 1 = move, -1 =spin */
  35. int              piece;         /* piece number 0, 1, ..., nofpieces-1 */
  36. coords_pointstr  start;         /* start point of drag (in screen coords) */
  37. coords_pointstr  old;           /* previous and current mouse posns */
  38. coords_pointstr  new;           /* for updating drag (in screen coords)*/    
  39. int              noflines;
  40. wimp_box         lines[4*MAX_SQUARES];   /* for outline of drag piece */
  41. } DragState;
  42.  
  43.  
  44. /****************** GLOBALS **********************************/
  45. extern wimp_w           tools_wh;
  46. extern wimp_w           board_wh;
  47. extern wimp_wind *      board_windefn;  
  48. extern Polymo           piece[MAX_PIECES];
  49. extern int              nofpieces;
  50. extern int              pe_mode;        /* play/edit mode */
  51. extern char             grid[MAX_BOARD][MAX_BOARD];
  52. extern char             filepath[];   /* save file path and window title */
  53. extern int              boardfiletype;
  54.  
  55. /************************** FUNCTIONS ******************************/
  56.  
  57. /* all non static functions are either called 
  58.   FROM PolySaw or 
  59.   INTO misc 
  60. */
  61.  
  62.  
  63. /* from EBUT in board_event_handler - polysaw to dragging or edit*/
  64. void deal_with_play_but(coords_pointstr wrk, coords_pointstr mse,            
  65.                                wimp_bbits mse_b, wimp_box box);
  66. void deal_with_squares_but(coords_pointstr wrk, wimp_bbits mse_b);
  67. void deal_with_holes_but(coords_pointstr wrk, wimp_bbits mse_b);
  68. void deal_with_jnsplt_but(coords_pointstr wrk, wimp_bbits mse_b);
  69.  
  70. /* ENULL - polysaw to dragging */
  71. void    update_drag(void); 
  72.  
  73. /* EREDRAW - polysaw to redraw */
  74. void    redraw_board(wimp_w handle);
  75.  
  76.  
  77. /*  polysaw to file */
  78. BOOL save_poly_board(char *filename, void *handle);
  79. void load_file(void);
  80.  
  81. /* from various to misc */
  82. void    fill_out_polydefn(int p);  
  83. int     roundtonearest(int a, int step);
  84. int     integer_sqrt(int x);
  85. void    force_piece_redraw(int p);
  86. void    force_grid_redraw(int row, int col);
  87. int     which_piece(coords_pointstr w);
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.