home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1999 Spring / macformat-077.iso / Shareware Plus / Development / SpriteWorld 2.2 / SpriteWorld files / Headers / Sprite.h < prev    next >
Encoding:
Text File  |  1999-01-12  |  10.3 KB  |  393 lines  |  [TEXT/CWIE]

  1. ///--------------------------------------------------------------------------------------
  2. //    Sprite.h
  3. //
  4. //    Portions are copyright: c 1991-94 Tony Myles, All rights reserved worldwide.
  5. //
  6. //    Description:    constants, structures, and prototypes for sprites
  7. ///--------------------------------------------------------------------------------------
  8.  
  9.  
  10. #ifndef __SPRITE__
  11. #define __SPRITE__
  12.  
  13. #ifndef __SWCOMMON__
  14. #include "SWCommonHeaders.h"
  15. #endif
  16.  
  17. #ifndef __SPRITEFRAME__
  18. #include "SpriteFrame.h"
  19. #endif
  20.  
  21.  
  22.  
  23. ///--------------------------------------------------------------------------------------
  24. //    sprite layer type definitions (required since our SpriteRec includes a SpriteLayerPtr,
  25. //    and we can't #include SpriteLayer.h, since it includes Sprite.h.)
  26. ///--------------------------------------------------------------------------------------
  27.  
  28. typedef struct SpriteLayerRec SpriteLayerRec;
  29. typedef SpriteLayerRec *SpriteLayerPtr, **SpriteLayerHdl;
  30.  
  31.  
  32. ///--------------------------------------------------------------------------------------
  33. //    sprite type definitions
  34. ///--------------------------------------------------------------------------------------
  35.  
  36. typedef struct SpriteRec SpriteRec;
  37. typedef SpriteRec *SpritePtr, **SpriteHdl;
  38. typedef struct RectArray RectArray;
  39. typedef RectArray *RectArrayPtr, **RectArrayHdl;
  40.  
  41. #ifdef __cplusplus
  42. extern "C" {
  43. #endif
  44.  
  45. #if PRAGMA_ALIGN_SUPPORTED
  46. #pragma options align=mac68k
  47. #endif
  48.  
  49.  
  50. typedef SW_FUNC void (*FrameProcPtr)(
  51.     SpritePtr srcSpriteP,
  52.     FramePtr curFrameP,
  53.     long *frameIndex);
  54.  
  55. typedef SW_FUNC void (*DrawProcPtr)(
  56.     FramePtr srcFrameP,
  57.     FramePtr dstFrameP, 
  58.     Rect *srcRect,
  59.     Rect *dstRect);
  60.  
  61. typedef SW_FUNC void (*MoveProcPtr)(
  62.     SpritePtr srcSpriteP);
  63.  
  64. typedef SW_FUNC void (*CollideProcPtr)(
  65.     SpritePtr srcSpriteP,
  66.     SpritePtr dstSpriteP,
  67.     Rect* sectRect);
  68.  
  69. typedef enum
  70. {
  71.     kSWDontRemoveSprite = 0,
  72.     kSWRemoveSprite,
  73.     kSWRemoveAndDisposeSprite
  74. } RemovalType;
  75.  
  76. typedef enum
  77. {
  78.     kSWWrapAroundMode = 0,
  79.     kSWPatrollingMode
  80. } AdvanceType;
  81.  
  82.  
  83.  
  84. ///--------------------------------------------------------------------------------------
  85. //    Rect array data structure
  86. ///--------------------------------------------------------------------------------------
  87.  
  88. struct RectArray
  89. {
  90.     short        numFrames;
  91.     Rect        frameRects[];
  92. };
  93.  
  94. ///--------------------------------------------------------------------------------------
  95. //    sprite data structure
  96. ///--------------------------------------------------------------------------------------
  97.  
  98. struct SpriteRec
  99. {
  100.     SpriteLayerPtr parentSpriteLayerP;    // the sprite layer this sprite is currently in
  101.     SpritePtr nextSpriteP;                    // next sprite in that layer
  102.     SpritePtr prevSpriteP;                    // previous sprite in that layer
  103.     SpritePtr nextActiveSpriteP;            // next active sprite in the SpriteWorld
  104.     SpritePtr nextIdleSpriteP;                // next idle sprite in the SpriteWorld
  105.  
  106.         // drawing fields
  107.     Boolean        isVisible;                    // draw the sprite?
  108.     Boolean        needsToBeDrawn;            // sprite has changed, needs to be drawn
  109.     Boolean        needsToBeErased;            // sprite needs to be erased onscreen
  110.     char            pad1;
  111.     Rect            destFrameRect;                // frame destination rectangle
  112.     Rect            oldFrameRect;                // last frame destination rectangle
  113.     Rect            deltaFrameRect;            // union of the sprite's lastRect and curRect
  114.     DrawProcPtr    frameDrawProc;                // callback to draw sprite
  115.     short            tileDepth;                    // the tile layers this sprite is under
  116.     short            pad2;
  117.  
  118.         // drawing fields for scrolling routines
  119.     Rect        clippedSourceRect;            // source sprite frame rect after clipping
  120.     Rect        destOffscreenRect;            // sprite's dest rect after clipping and offset
  121.     Rect        oldOffscreenRect;                // the destOffscreenRect from the previous frame
  122.     Boolean    destRectIsVisible;            // is destOffscreenRect visible on screen?
  123.     Boolean    oldRectIsVisible;                // was oldOffscreenRect visible on screen?
  124.     char        pad3;
  125.  
  126.         // frame fields
  127.     Boolean            frameArrayIsShared;    // is the frameArray shared with another sprite?
  128.     FramePtr            *frameArray;            // array of frames
  129.     FramePtr            curFrameP;                // current frame
  130.     long                numFrames;                // number of frames
  131.     long                maxFrames;                // maximum number of frames
  132.     long                frameTimeInterval;    // time interval to advance frame
  133.     unsigned long     timeOfLastFrameChange; // time (from runningTimeCount) frame was last changed
  134.     long                frameAdvance;            // amount to adjust frame index
  135.     long                curFrameIndex;            // current frame index
  136.     long                firstFrameIndex;        // first frame to advance
  137.     long                lastFrameIndex;        // last frame to advance
  138.     FrameProcPtr     frameChangeProc;        // callback to change frames
  139.  
  140.         // movement fields
  141.     long            moveTimeInterval;            // time interval to move sprite
  142.     unsigned long timeOfLastMove;            // time (from runningTimeCount) sprite was last moved
  143.     short            horizMoveDelta;            // horizontal movement delta
  144.     short            vertMoveDelta;                // vertical movement delta
  145.     Rect            moveBoundsRect;            // bounds of the sprite's movement
  146.     MoveProcPtr    spriteMoveProc;            // callback to handle movement
  147.  
  148.         // collision detection
  149.     CollideProcPtr    spriteCollideProc;    // callback to handle collisions
  150.  
  151.         // miscellaneous
  152.     GWorldPtr        sharedPictGWorld;        // if common GWorld used for frames, here it is
  153.     GWorldPtr        sharedMaskGWorld;        // same for mask
  154.     RemovalType        spriteRemoval;            // whether to remove sprite, and if so how
  155.     AdvanceType        frameAdvanceMode;        // mode of automatic frame advancement
  156.     
  157.     unsigned long    translucencyLevel;    // used by translucent blitter
  158.     unsigned long    rotation;                // used by rotation blitter
  159.     short                scaledWidth;            // used by scaling blitter
  160.     short                scaledHeight;            // used by scaling blitter
  161.  
  162.     long            userData;                    // reserved for user
  163. };
  164.  
  165.  
  166. ///--------------------------------------------------------------------------------------
  167. //    sprite function prototypes
  168. ///--------------------------------------------------------------------------------------
  169.  
  170. SW_FUNC OSErr SWCreateSprite(
  171.     SpritePtr* newSpriteP,
  172.     void* spriteStorageP,
  173.     short maxFrames);
  174.  
  175. SW_FUNC OSErr SWCreateSpriteFromCicnResource(
  176.     SpriteWorldPtr destSpriteWorld,
  177.     SpritePtr* newSpriteP,
  178.     void* spriteStorageP,
  179.     short cIconID,
  180.     short maxFrames,
  181.     MaskType maskType);
  182.  
  183. SW_FUNC OSErr SWCreateSpriteFromPictResource(
  184.     SpriteWorldPtr destSpriteWorld,
  185.     SpritePtr* newSpriteP,
  186.     void* spriteStorageP,
  187.     short pictResID,
  188.     short maskResID,
  189.     short maxFrames,
  190.     MaskType maskType);
  191.  
  192. SW_FUNC OSErr SWCreateSpriteFromSinglePict(
  193.     SpriteWorldPtr destSpriteWorld,
  194.     SpritePtr* newSpriteP,
  195.     void* spriteStorageP,
  196.     short pictResID,
  197.     short maskResID,
  198.     short frameDimension,
  199.     short borderWidth,
  200.     MaskType maskType);
  201.  
  202. SW_FUNC OSErr SWCreateSpriteFromSinglePictXY(
  203.         SpriteWorldPtr destSpriteWorld,
  204.         SpritePtr* newSpriteP,
  205.         void* spriteStorageP,
  206.         short pictResID,
  207.         short maskResID,
  208.         short frameWidth,
  209.         short frameHeight,
  210.         short borderWidth,
  211.         short borderHeight,
  212.         short MaxFrames,
  213.         MaskType maskType);
  214.  
  215. SW_FUNC OSErr SWUpdateSpriteFromPictResource(
  216.     SpritePtr theSpriteP,
  217.     short pictResID);
  218.     
  219. SW_FUNC OSErr SWCloneSprite(
  220.     SpritePtr    cloneSpriteP,
  221.     SpritePtr*    newSpriteP,
  222.     void*        spriteStorageP);
  223.  
  224. SW_FUNC OSErr SWFastCloneSprite(
  225.     SpritePtr    cloneSpriteP,
  226.     SpritePtr*    newSpriteP,
  227.     void*        spriteStorageP);
  228.  
  229. SW_FUNC OSErr SWCloneSpriteFromTile(
  230.     SpriteWorldPtr spriteWorldP,
  231.     SpritePtr* newSpriteP,
  232.     void* spriteStorageP,
  233.     short firstTileID,
  234.     short lastTileID);
  235.  
  236. SW_FUNC void SWRemoveSpriteFromAnimation(
  237.     SpriteWorldPtr    spriteWorldP,
  238.     SpritePtr        spriteP,
  239.     Boolean            disposeOfSprite);
  240.     
  241. SW_FUNC void SWDisposeSprite(
  242.     SpritePtr *deadSpritePP);
  243.  
  244. SW_FUNC void SWCloseSprite(
  245.     SpritePtr deadSpriteP);
  246.  
  247. SW_FUNC void SWLockSprite(
  248.     SpritePtr srcSpriteP);
  249.  
  250. SW_FUNC void SWUnlockSprite(
  251.     SpritePtr srcSpriteP);
  252.  
  253. SW_FUNC void SWStdSpriteDrawProc(
  254.     FramePtr srcFrameP,
  255.     FramePtr dstFrameP,
  256.     Rect* srcRect,
  257.     Rect* dstRect);
  258.  
  259. SW_FUNC OSErr SWAddFrame(
  260.     SpritePtr srcSpriteP,
  261.     FramePtr newFrameP);
  262.  
  263. SW_FUNC OSErr SWInsertFrame(
  264.     SpritePtr    srcSpriteP,
  265.     FramePtr    newFrameP,
  266.     long        frameIndex);
  267.  
  268. SW_FUNC void SWRemoveFrame(
  269.     SpritePtr srcSpriteP,
  270.     FramePtr oldFrameP);
  271.  
  272. ///--------------------------------------------------------------------------------------
  273. //    Sprite Set-up functions
  274. ///--------------------------------------------------------------------------------------
  275.  
  276. SW_FUNC OSErr SWSetCurrentFrame(
  277.     SpritePtr srcSpriteP,
  278.     FramePtr curFrameP);
  279.  
  280. SW_FUNC void SWSetCurrentFrameIndex(
  281.     SpritePtr srcSpriteP,
  282.     short frameIndex);
  283.  
  284. SW_FUNC void SWSetSpriteCollideProc(
  285.     SpritePtr srcSpriteP,
  286.     CollideProcPtr collideProc);
  287.  
  288. SW_FUNC OSErr SWSetSpriteDrawProc(
  289.     SpritePtr srcSpriteP,
  290.     DrawProcPtr drawProc);
  291.  
  292. SW_FUNC void SWSetSpriteFrameAdvance(
  293.     SpritePtr srcSpriteP,
  294.     short frameAdvance);
  295.  
  296. SW_FUNC void SWSetSpriteFrameAdvanceMode(
  297.     SpritePtr srcSpriteP,
  298.     AdvanceType advanceMode);
  299.  
  300. SW_FUNC void SWSetSpriteFrameRange(
  301.     SpritePtr srcSpriteP,
  302.     short firstFrameIndex,
  303.     short lastFrameIndex);
  304.  
  305. SW_FUNC void SWSetSpriteFrameTime(
  306.     SpritePtr srcSpriteP,
  307.     long timeInterval);
  308.  
  309. SW_FUNC void SWSetSpriteFrameProc(
  310.     SpritePtr srcSpriteP,
  311.     FrameProcPtr frameProc);
  312.  
  313. SW_FUNC void SWSetSpriteLocation(
  314.     SpritePtr srcSpriteP,
  315.     short horizLoc,
  316.     short vertLoc);
  317.  
  318. SW_FUNC void SWSetSpriteMoveBounds(
  319.     SpritePtr srcSpriteP,
  320.     Rect* moveBoundsRect);
  321.  
  322. SW_FUNC void SWSetSpriteMoveDelta(
  323.     SpritePtr srcSpriteP,
  324.     short horizDelta,
  325.     short vertDelta);
  326.  
  327. SW_FUNC void SWSetSpriteMoveTime(
  328.     SpritePtr srcSpriteP,
  329.     long timeInterval);
  330.  
  331. SW_FUNC void SWSetSpriteMoveProc(
  332.     SpritePtr srcSpriteP, MoveProcPtr moveProc);
  333.  
  334. SW_FUNC void SWSetSpriteVisible(
  335.     SpritePtr srcSpriteP,
  336.     Boolean isVisible);
  337.  
  338. ///--------------------------------------------------------------------------------------
  339. //    Sprite Runtime functions
  340. ///--------------------------------------------------------------------------------------
  341.  
  342. SW_FUNC void SWMoveSprite(
  343.     SpritePtr srcSpriteP,
  344.     short horizLoc,
  345.     short vertLoc);
  346.  
  347. SW_FUNC void SWOffsetSprite(
  348.     SpritePtr srcSpriteP,
  349.     short horizOffset,
  350.     short vertOffset);
  351.  
  352. SW_FUNC Boolean SWBounceSprite(
  353.     SpritePtr srcSpriteP);
  354.  
  355. SW_FUNC Boolean SWWrapSprite(
  356.     SpritePtr srcSpriteP);
  357.  
  358. SW_FUNC Boolean SWRegionCollision(
  359.     SpritePtr srcSpriteP,
  360.     SpritePtr dstSpriteP);
  361.  
  362. SW_FUNC Boolean SWRadiusCollision(
  363.     SpritePtr srcSpriteP,
  364.     SpritePtr dstSpriteP);
  365.  
  366. SW_FUNC Boolean SWPixelCollision(
  367.     SpritePtr srcSpriteP,
  368.     SpritePtr dstSpriteP);
  369.  
  370. SW_FUNC Boolean SWIsSpriteInRect(
  371.     SpritePtr srcSpriteP,
  372.     Rect* testRect);
  373.  
  374. SW_FUNC Boolean SWIsSpriteFullyInRect(
  375.     SpritePtr srcSpriteP,
  376.     Rect* testRect);
  377.  
  378. SW_FUNC Boolean SWIsPointInSprite(
  379.     SpritePtr srcSpriteP,
  380.     Point testPoint);
  381.  
  382.  
  383. #if PRAGMA_ALIGN_SUPPORTED
  384. #pragma options align=reset
  385. #endif
  386.  
  387. #ifdef __cplusplus
  388. }
  389. #endif
  390.  
  391. #endif    /* __SPRITE__ */
  392.  
  393.