sgdk: sprite_eng.h Source File

sgdk

- Main Page
- Related Pages
- Classes
- Files

- File List
- File Members

sprite_eng.h
Go to the documentation of this file.

    00001
    00012 #ifndef _SPRITE_ENG_H_
    00013 #define _SPRITE_ENG_H_
    00014
    00015 #include "vdp_tile.h"
    00016 #include "vdp_spr.h"
    00017 #include "pal.h"
    00018
    00019
    00024 #define COLLISION_TYPE_NONE     0
    00025
    00029 #define COLLISION_TYPE_BOX      1
    00030
    00034 #define COLLISION_TYPE_CIRCLE   2
    00035
    00041 #define SPR_FLAG_INSERT_HEAD                    0x4000
    00042
    00048 #define SPR_FLAG_DISABLE_DELAYED_FRAME_UPDATE   0x2000
    00049
    00053 #define SPR_FLAG_AUTO_VRAM_ALLOC                0x1000
    00054
    00058 #define SPR_FLAG_AUTO_SPRITE_ALLOC              0x0800
    00059
    00063 #define SPR_FLAG_AUTO_TILE_UPLOAD               0x0400
    00064
    00068 #define SPR_FLAG_AUTO_VISIBILITY                0x0200
    00069
    00075 #define SPR_FLAG_FAST_AUTO_VISIBILITY           0x0100
    00076
    00081 #define SPR_FLAG_MASK                           (SPR_FLAG_INSERT_HEAD | SPR_FLAG_DISABLE_DELAYED_FRAME_UPDATE | SPR_FLAG_AUTO_VRAM_ALLOC | SPR_FLAG_AUTO_SPRITE_ALLOC | SPR_FLAG_AUTO_TILE_UPLOAD | SPR_FLAG_AUTO_VISIBILITY | SPR_FLAG_FAST_AUTO_VISIBILITY)
    00082
    00087 #define SPR_MIN_DEPTH       (-0x8000)
    00088
    00092 #define SPR_MAX_DEPTH       0x7FFF
    00093
    00098 typedef enum
    00099 {
    00100     VISIBLE,
    00101     HIDDEN,
    00102     AUTO_FAST,
    00103     AUTO_SLOW,
    00104 } SpriteVisibility;
    00105
    00119 typedef struct
    00120 {
    00121     s8 x;
    00122     s8 y;
    00123     u8 w;
    00124     u8 h;
    00125 } BoxCollision;
    00126
    00138 typedef struct
    00139 {
    00140     s8 x;
    00141     s8 y;
    00142     u16 ray;
    00143 } CircleCollision;
    00144
    00165 typedef struct _collision
    00166 {
    00167     u8 typeHit;
    00168     u8 typeAttack;
    00169     union
    00170     {
    00171         BoxCollision box;
    00172         CircleCollision circle;
    00173     } hit;
    00174     union
    00175     {
    00176         BoxCollision box;
    00177         CircleCollision circle;
    00178     } attack;
    00179 } Collision;
    00180
    00198 typedef struct
    00199 {
    00200     u8 numTile;
    00201     u8 offsetY;          // respect VDP sprite field order
    00202     u8 offsetYFlip;
    00203     u8 size;
    00204     u8 offsetX;
    00205     u8 offsetXFlip;
    00206 }  FrameVDPSprite;
    00207
    00223 typedef struct
    00224 {
    00225     u8 numSprite;
    00226     u8 timer;
    00227     TileSet* tileset;                   // TODO: have a tileset per VDP sprite --> probably not a good idea performance wise
    00228     Collision* collision;               // Require many DMA queue operations and fast DMA flush as well, also bring extra computing in calculating delayed update
    00229     FrameVDPSprite frameVDPSprites[];
    00230 } AnimationFrame;
    00231
    00243 typedef struct
    00244 {
    00245     u8 numFrame;
    00246     u8 loop;
    00247     AnimationFrame** frames;
    00248 } Animation;
    00249
    00271 typedef struct
    00272 {
    00273     u16 w;
    00274     u16 h;
    00275     Palette* palette;
    00276     u16 numAnimation;
    00277     Animation** animations;
    00278     u16 maxNumTile;
    00279     u16 maxNumSprite;
    00280 } SpriteDefinition;
    00281
    00331 typedef struct Sprite
    00332 {
    00333     u16 status;
    00334     u16 visibility;
    00335     const SpriteDefinition* definition;
    00336     void (*onFrameChange)(struct Sprite* sprite);
    00337     Animation* animation;
    00338     AnimationFrame* frame;
    00339     s16 animInd;
    00340     s16 frameInd;
    00341     u16 timer;
    00342     s16 x;
    00343     s16 y;
    00344     s16 depth;
    00345     u16 attribut;
    00346     u16 VDPSpriteIndex;
    00347     VDPSprite* lastVDPSprite;
    00348     u16 lastNumSprite;
    00349     s16 spriteToHide;
    00350     u32 data;
    00351     struct Sprite* prev;
    00352     struct Sprite* next;
    00353 } Sprite;
    00354
    00366 typedef void FrameChangeCallback(Sprite* sprite);
    00367
    00371 extern Sprite* spritesBank;
    00375 extern Sprite* firstSprite;
    00379 extern Sprite* lastSprite;
    00383 extern u16 spriteVramSize;
    00384
    00385
    00396 void SPR_init();
    00411 void SPR_initEx(u16 vramSize);
    00419 void SPR_end();
    00424 bool SPR_isInitialized();
    00425
    00432 void SPR_reset();
    00433
    00483 Sprite* SPR_addSpriteEx(const SpriteDefinition* spriteDef, s16 x, s16 y, u16 attribut, u16 spriteIndex, u16 flag);
    00508 Sprite* SPR_addSprite(const SpriteDefinition* spriteDef, s16 x, s16 y, u16 attribut);
    00556 Sprite* SPR_addSpriteExSafe(const SpriteDefinition* spriteDef, s16 x, s16 y, u16 attribut, u16 spriteIndex, u16 flag);
    00579 Sprite* SPR_addSpriteSafe(const SpriteDefinition* spriteDef, s16 x, s16 y, u16 attribut);
    00580
    00592 void SPR_releaseSprite(Sprite* sprite);
    00597 u16 SPR_getNumActiveSprite();
    00602 void SPR_defragVRAM();
    00631 u16** SPR_loadAllFrames(const SpriteDefinition* sprDef, u16 index, u16* totalNumTile);
    00632
    00647 bool SPR_setDefinition(Sprite* sprite, const SpriteDefinition* spriteDef);
    00652 s16 SPR_getPositionX(Sprite* sprite);
    00657 s16 SPR_getPositionY(Sprite* sprite);
    00669 void SPR_setPosition(Sprite* sprite, s16 x, s16 y);
    00679 void SPR_setHFlip(Sprite* sprite, u16 value);
    00689 void SPR_setVFlip(Sprite* sprite, u16 value);
    00699 void SPR_setPalette(Sprite* sprite, u16 value);
    00709 void SPR_setPriority(Sprite* sprite, u16 value);
    00714 void SPR_setPriorityAttribut(Sprite* sprite, u16 value);
    00727 void SPR_setDepth(Sprite* sprite, s16 value);
    00732 void SPR_setZ(Sprite* sprite, s16 value);
    00736 void SPR_setAlwaysOnTop(Sprite* sprite, u16 value);
    00748 void SPR_setAnimAndFrame(Sprite* sprite, s16 anim, s16 frame);
    00758 void SPR_setAnim(Sprite* sprite, s16 anim);
    00768 void SPR_setFrame(Sprite* sprite, s16 frame);
    00776 void SPR_nextFrame(Sprite* sprite);
    00777
    00792 bool SPR_setVRAMTileIndex(Sprite* sprite, s16 value);
    00810 bool SPR_setSpriteTableIndex(Sprite* sprite, s16 value);
    00821 void SPR_setAutoTileUpload(Sprite* sprite, bool value);
    00834 void SPR_setDelayedFrameUpdate(Sprite* sprite, bool value);
    00850 void SPR_setFrameChangeCallback(Sprite* sprite, FrameChangeCallback* callback);
    00851
    00870 SpriteVisibility SPR_getVisibility(Sprite* sprite);
    00888 bool SPR_isVisible(Sprite* sprite, bool recompute);
    00889
    00913 void SPR_setVisibility(Sprite* sprite, SpriteVisibility value);
    00917 void SPR_setAlwaysVisible(Sprite* sprite, u16 value);
    00921 void SPR_setNeverVisible(Sprite* sprite, u16 value);
    00925 bool SPR_computeVisibility(Sprite* sprite);
    00926
    00934 void SPR_clear();
    00944 void SPR_update();
    00945
    00950 void SPR_logProfil();
    00955 void SPR_logSprites();
    00956
    00957
    00958 #endif // _SPRITE_ENG_H_

All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines