home *** CD-ROM | disk | FTP | other *** search
Text File | 1999-01-12 | 10.3 KB | 393 lines | [TEXT/CWIE] |
- ///--------------------------------------------------------------------------------------
- // Sprite.h
- //
- // Portions are copyright: c 1991-94 Tony Myles, All rights reserved worldwide.
- //
- // Description: constants, structures, and prototypes for sprites
- ///--------------------------------------------------------------------------------------
-
-
- #ifndef __SPRITE__
- #define __SPRITE__
-
- #ifndef __SWCOMMON__
- #include "SWCommonHeaders.h"
- #endif
-
- #ifndef __SPRITEFRAME__
- #include "SpriteFrame.h"
- #endif
-
-
-
- ///--------------------------------------------------------------------------------------
- // sprite layer type definitions (required since our SpriteRec includes a SpriteLayerPtr,
- // and we can't #include SpriteLayer.h, since it includes Sprite.h.)
- ///--------------------------------------------------------------------------------------
-
- typedef struct SpriteLayerRec SpriteLayerRec;
- typedef SpriteLayerRec *SpriteLayerPtr, **SpriteLayerHdl;
-
-
- ///--------------------------------------------------------------------------------------
- // sprite type definitions
- ///--------------------------------------------------------------------------------------
-
- typedef struct SpriteRec SpriteRec;
- typedef SpriteRec *SpritePtr, **SpriteHdl;
- typedef struct RectArray RectArray;
- typedef RectArray *RectArrayPtr, **RectArrayHdl;
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #if PRAGMA_ALIGN_SUPPORTED
- #pragma options align=mac68k
- #endif
-
-
- typedef SW_FUNC void (*FrameProcPtr)(
- SpritePtr srcSpriteP,
- FramePtr curFrameP,
- long *frameIndex);
-
- typedef SW_FUNC void (*DrawProcPtr)(
- FramePtr srcFrameP,
- FramePtr dstFrameP,
- Rect *srcRect,
- Rect *dstRect);
-
- typedef SW_FUNC void (*MoveProcPtr)(
- SpritePtr srcSpriteP);
-
- typedef SW_FUNC void (*CollideProcPtr)(
- SpritePtr srcSpriteP,
- SpritePtr dstSpriteP,
- Rect* sectRect);
-
- typedef enum
- {
- kSWDontRemoveSprite = 0,
- kSWRemoveSprite,
- kSWRemoveAndDisposeSprite
- } RemovalType;
-
- typedef enum
- {
- kSWWrapAroundMode = 0,
- kSWPatrollingMode
- } AdvanceType;
-
-
-
- ///--------------------------------------------------------------------------------------
- // Rect array data structure
- ///--------------------------------------------------------------------------------------
-
- struct RectArray
- {
- short numFrames;
- Rect frameRects[];
- };
-
- ///--------------------------------------------------------------------------------------
- // sprite data structure
- ///--------------------------------------------------------------------------------------
-
- struct SpriteRec
- {
- SpriteLayerPtr parentSpriteLayerP; // the sprite layer this sprite is currently in
- SpritePtr nextSpriteP; // next sprite in that layer
- SpritePtr prevSpriteP; // previous sprite in that layer
- SpritePtr nextActiveSpriteP; // next active sprite in the SpriteWorld
- SpritePtr nextIdleSpriteP; // next idle sprite in the SpriteWorld
-
- // drawing fields
- Boolean isVisible; // draw the sprite?
- Boolean needsToBeDrawn; // sprite has changed, needs to be drawn
- Boolean needsToBeErased; // sprite needs to be erased onscreen
- char pad1;
- Rect destFrameRect; // frame destination rectangle
- Rect oldFrameRect; // last frame destination rectangle
- Rect deltaFrameRect; // union of the sprite's lastRect and curRect
- DrawProcPtr frameDrawProc; // callback to draw sprite
- short tileDepth; // the tile layers this sprite is under
- short pad2;
-
- // drawing fields for scrolling routines
- Rect clippedSourceRect; // source sprite frame rect after clipping
- Rect destOffscreenRect; // sprite's dest rect after clipping and offset
- Rect oldOffscreenRect; // the destOffscreenRect from the previous frame
- Boolean destRectIsVisible; // is destOffscreenRect visible on screen?
- Boolean oldRectIsVisible; // was oldOffscreenRect visible on screen?
- char pad3;
-
- // frame fields
- Boolean frameArrayIsShared; // is the frameArray shared with another sprite?
- FramePtr *frameArray; // array of frames
- FramePtr curFrameP; // current frame
- long numFrames; // number of frames
- long maxFrames; // maximum number of frames
- long frameTimeInterval; // time interval to advance frame
- unsigned long timeOfLastFrameChange; // time (from runningTimeCount) frame was last changed
- long frameAdvance; // amount to adjust frame index
- long curFrameIndex; // current frame index
- long firstFrameIndex; // first frame to advance
- long lastFrameIndex; // last frame to advance
- FrameProcPtr frameChangeProc; // callback to change frames
-
- // movement fields
- long moveTimeInterval; // time interval to move sprite
- unsigned long timeOfLastMove; // time (from runningTimeCount) sprite was last moved
- short horizMoveDelta; // horizontal movement delta
- short vertMoveDelta; // vertical movement delta
- Rect moveBoundsRect; // bounds of the sprite's movement
- MoveProcPtr spriteMoveProc; // callback to handle movement
-
- // collision detection
- CollideProcPtr spriteCollideProc; // callback to handle collisions
-
- // miscellaneous
- GWorldPtr sharedPictGWorld; // if common GWorld used for frames, here it is
- GWorldPtr sharedMaskGWorld; // same for mask
- RemovalType spriteRemoval; // whether to remove sprite, and if so how
- AdvanceType frameAdvanceMode; // mode of automatic frame advancement
-
- unsigned long translucencyLevel; // used by translucent blitter
- unsigned long rotation; // used by rotation blitter
- short scaledWidth; // used by scaling blitter
- short scaledHeight; // used by scaling blitter
-
- long userData; // reserved for user
- };
-
-
- ///--------------------------------------------------------------------------------------
- // sprite function prototypes
- ///--------------------------------------------------------------------------------------
-
- SW_FUNC OSErr SWCreateSprite(
- SpritePtr* newSpriteP,
- void* spriteStorageP,
- short maxFrames);
-
- SW_FUNC OSErr SWCreateSpriteFromCicnResource(
- SpriteWorldPtr destSpriteWorld,
- SpritePtr* newSpriteP,
- void* spriteStorageP,
- short cIconID,
- short maxFrames,
- MaskType maskType);
-
- SW_FUNC OSErr SWCreateSpriteFromPictResource(
- SpriteWorldPtr destSpriteWorld,
- SpritePtr* newSpriteP,
- void* spriteStorageP,
- short pictResID,
- short maskResID,
- short maxFrames,
- MaskType maskType);
-
- SW_FUNC OSErr SWCreateSpriteFromSinglePict(
- SpriteWorldPtr destSpriteWorld,
- SpritePtr* newSpriteP,
- void* spriteStorageP,
- short pictResID,
- short maskResID,
- short frameDimension,
- short borderWidth,
- MaskType maskType);
-
- SW_FUNC OSErr SWCreateSpriteFromSinglePictXY(
- SpriteWorldPtr destSpriteWorld,
- SpritePtr* newSpriteP,
- void* spriteStorageP,
- short pictResID,
- short maskResID,
- short frameWidth,
- short frameHeight,
- short borderWidth,
- short borderHeight,
- short MaxFrames,
- MaskType maskType);
-
- SW_FUNC OSErr SWUpdateSpriteFromPictResource(
- SpritePtr theSpriteP,
- short pictResID);
-
- SW_FUNC OSErr SWCloneSprite(
- SpritePtr cloneSpriteP,
- SpritePtr* newSpriteP,
- void* spriteStorageP);
-
- SW_FUNC OSErr SWFastCloneSprite(
- SpritePtr cloneSpriteP,
- SpritePtr* newSpriteP,
- void* spriteStorageP);
-
- SW_FUNC OSErr SWCloneSpriteFromTile(
- SpriteWorldPtr spriteWorldP,
- SpritePtr* newSpriteP,
- void* spriteStorageP,
- short firstTileID,
- short lastTileID);
-
- SW_FUNC void SWRemoveSpriteFromAnimation(
- SpriteWorldPtr spriteWorldP,
- SpritePtr spriteP,
- Boolean disposeOfSprite);
-
- SW_FUNC void SWDisposeSprite(
- SpritePtr *deadSpritePP);
-
- SW_FUNC void SWCloseSprite(
- SpritePtr deadSpriteP);
-
- SW_FUNC void SWLockSprite(
- SpritePtr srcSpriteP);
-
- SW_FUNC void SWUnlockSprite(
- SpritePtr srcSpriteP);
-
- SW_FUNC void SWStdSpriteDrawProc(
- FramePtr srcFrameP,
- FramePtr dstFrameP,
- Rect* srcRect,
- Rect* dstRect);
-
- SW_FUNC OSErr SWAddFrame(
- SpritePtr srcSpriteP,
- FramePtr newFrameP);
-
- SW_FUNC OSErr SWInsertFrame(
- SpritePtr srcSpriteP,
- FramePtr newFrameP,
- long frameIndex);
-
- SW_FUNC void SWRemoveFrame(
- SpritePtr srcSpriteP,
- FramePtr oldFrameP);
-
- ///--------------------------------------------------------------------------------------
- // Sprite Set-up functions
- ///--------------------------------------------------------------------------------------
-
- SW_FUNC OSErr SWSetCurrentFrame(
- SpritePtr srcSpriteP,
- FramePtr curFrameP);
-
- SW_FUNC void SWSetCurrentFrameIndex(
- SpritePtr srcSpriteP,
- short frameIndex);
-
- SW_FUNC void SWSetSpriteCollideProc(
- SpritePtr srcSpriteP,
- CollideProcPtr collideProc);
-
- SW_FUNC OSErr SWSetSpriteDrawProc(
- SpritePtr srcSpriteP,
- DrawProcPtr drawProc);
-
- SW_FUNC void SWSetSpriteFrameAdvance(
- SpritePtr srcSpriteP,
- short frameAdvance);
-
- SW_FUNC void SWSetSpriteFrameAdvanceMode(
- SpritePtr srcSpriteP,
- AdvanceType advanceMode);
-
- SW_FUNC void SWSetSpriteFrameRange(
- SpritePtr srcSpriteP,
- short firstFrameIndex,
- short lastFrameIndex);
-
- SW_FUNC void SWSetSpriteFrameTime(
- SpritePtr srcSpriteP,
- long timeInterval);
-
- SW_FUNC void SWSetSpriteFrameProc(
- SpritePtr srcSpriteP,
- FrameProcPtr frameProc);
-
- SW_FUNC void SWSetSpriteLocation(
- SpritePtr srcSpriteP,
- short horizLoc,
- short vertLoc);
-
- SW_FUNC void SWSetSpriteMoveBounds(
- SpritePtr srcSpriteP,
- Rect* moveBoundsRect);
-
- SW_FUNC void SWSetSpriteMoveDelta(
- SpritePtr srcSpriteP,
- short horizDelta,
- short vertDelta);
-
- SW_FUNC void SWSetSpriteMoveTime(
- SpritePtr srcSpriteP,
- long timeInterval);
-
- SW_FUNC void SWSetSpriteMoveProc(
- SpritePtr srcSpriteP, MoveProcPtr moveProc);
-
- SW_FUNC void SWSetSpriteVisible(
- SpritePtr srcSpriteP,
- Boolean isVisible);
-
- ///--------------------------------------------------------------------------------------
- // Sprite Runtime functions
- ///--------------------------------------------------------------------------------------
-
- SW_FUNC void SWMoveSprite(
- SpritePtr srcSpriteP,
- short horizLoc,
- short vertLoc);
-
- SW_FUNC void SWOffsetSprite(
- SpritePtr srcSpriteP,
- short horizOffset,
- short vertOffset);
-
- SW_FUNC Boolean SWBounceSprite(
- SpritePtr srcSpriteP);
-
- SW_FUNC Boolean SWWrapSprite(
- SpritePtr srcSpriteP);
-
- SW_FUNC Boolean SWRegionCollision(
- SpritePtr srcSpriteP,
- SpritePtr dstSpriteP);
-
- SW_FUNC Boolean SWRadiusCollision(
- SpritePtr srcSpriteP,
- SpritePtr dstSpriteP);
-
- SW_FUNC Boolean SWPixelCollision(
- SpritePtr srcSpriteP,
- SpritePtr dstSpriteP);
-
- SW_FUNC Boolean SWIsSpriteInRect(
- SpritePtr srcSpriteP,
- Rect* testRect);
-
- SW_FUNC Boolean SWIsSpriteFullyInRect(
- SpritePtr srcSpriteP,
- Rect* testRect);
-
- SW_FUNC Boolean SWIsPointInSprite(
- SpritePtr srcSpriteP,
- Point testPoint);
-
-
- #if PRAGMA_ALIGN_SUPPORTED
- #pragma options align=reset
- #endif
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* __SPRITE__ */
-
-