E:/PPC/XFlib/include/xf_sprites.h

Go to the documentation of this file.
00001 #ifndef __XF_SPRITES_H__
00002 #define __XF_SPRITES_H__
00003 
00004 #include "xf_types.h"
00005 #include "xf_params.h"
00006 #include "xf_alloc.h"
00007 
00008 
00009 typedef struct {
00010         u8 Alive;
00011         void *Image; // Pointeur sur l'image en mémoire :p
00012 
00013         s16 X, Y;
00014         s16 ImgWidth, ImgHeight, Width, Height; // Image size, texture size (zoomed, etc...)
00015         u8 ColorMode, Full; // 0 pour 16 couleurs, 1 pour 256 couleurs, etc..., Full ou pas (pour aller plus vite)
00016         u16 *Palette; // Palette ! (pas besoin de numéro :p)
00017         s16 Priority;
00018 
00019         // Pour les animations
00020         s16 Frame, FrameChange, FirstFrame, LastFrame, AnimCycles, AnimSpeed; // Frame pour si on anime (je rajouterai le code plus tard...
00021         u8 AnimPlay, AnimTime, AnimType;
00022         
00023         s16 Alpha; // 0-32
00024         u8 HFlip, VFlip;
00025         s32 Zoom, Angle;
00026         s32 ZoomX, ZoomY;       
00027         u16 *RLEList;
00028         u8 *RLE;        
00029         u8 *AlphaLayer; // For pngs and all using alpha layers...
00030         
00031         u8 Window; // Window, pour limiter la portée, 0-16
00032         
00033         u8 MinX, MinY, MaxX, MaxY;
00034 
00035 } sprite_type;
00036 
00037 extern int xf_minsprite, xf_maxsprite;
00038 
00039 
00040 #define XF_ResetSprites XF_InitSprites
00041 
00042 
00043 #define N_SPRITES 4096
00044 
00045 extern sprite_type *xf_sprites[N_SPRITES];
00046 
00047 #define SPRITE_16COLORS 0
00048 #define SPRITE_256COLORS 1
00049 #define SPRITE_16BIT 2
00050 #define SPRITE_16BITS 2
00051 #define SPRITE_24BIT 3
00052 #define SPRITE_24BITS 3
00053 
00054 
00055 #define ANIM_LOOP 0 // loop around
00056 #define ANIM_UPDOWN 1 // back and forth animation
00057 
00058 #define ANIM_ONESHOT ANIM_LOOP, 1
00059 #define ANIM_INFINITE ANIM_LOOP, -1
00060 
00061 void XF_InitSprites(void);
00062 
00063 
00064 
00065 
00066 
00067 
00075 void XF_CreateSprite(u32 sprite, XF_Sprite *image, s16 width, s16 height, s32 x, s32 y);
00076 
00077 
00089 #define XF_SetSpriteX(sprite, x) xf_sprites[sprite]->X = x
00090 
00102 #define XF_SetSpriteY(sprite, y) xf_sprites[sprite]->Y = y
00103 
00104 extern inline void XF_SetSpriteXY(u16 sprite, s16 x, s16 y){
00105         XF_SetSpriteX(sprite, x);
00106         XF_SetSpriteY(sprite, y);
00107 }
00108 
00109 
00110 
00119 #define XF_GetSpriteX(sprite) xf_sprites[sprite]->X
00120 
00129 #define XF_GetSpriteY(sprite) xf_sprites[sprite]->Y
00130 
00131 
00132 
00133 
00134 #define XF_GetSpriteWidth(sprite) xf_sprites[sprite]->Width
00135 #define XF_GetSpriteHeight(sprite) xf_sprites[sprite]->Height
00136 
00137 #define XF_SetSpriteAlive(sprite, alive) xf_sprites[sprite]->Alive = alive
00138 #define XF_GetSpriteAlive(sprite) (xf_sprites[sprite] && (xf_sprites[sprite]->Alive))
00139 
00140 #define XF_SetSpriteVisible(sprite, visible) xf_sprites[sprite]->Alive = visible
00141 #define XF_GetSpriteVisible(sprite) (xf_sprites[sprite] && (xf_sprites[sprite]->Alive))
00142 
00143 void XF_SetSpriteXY(u16 sprite, s16 x, s16 y);
00144 
00145 
00146 
00164 #define XF_StartSpriteAnim(sprite, firstframe, lastframe, speed) XF_StartSpriteAnimEx(sprite, firstframe, lastframe, speed, ANIM_INFINITE)
00165 
00189 void XF_StartSpriteAnimEx(s16 sprite, s16 FirstFrame, s16 LastFrame, s16 AnimSpeed, u8 AnimType, s16 AnimCycles);
00190 
00199 #define XF_StopSpriteAnim(sprite) xf_sprites[sprite]->AnimPlay = 0
00200 
00201 #define XF_SetSpriteFrame(sprite, frame) xf_sprites[sprite]->Frame = frame
00202 #define XF_GetSpriteFrame(sprite) xf_sprites[sprite]->Frame
00203 
00204 #define XF_SetSpritePrio(sprite, prio) xf_sprites[sprite]->Priority = prio
00205 #define XF_GetSpritePrio(sprite) xf_sprites[sprite]->Priority
00206 
00207 #define XF_SetSpriteAlpha(sprite, alpha) xf_sprites[sprite]->Alpha = alpha
00208 #define XF_GetSpriteAlpha(sprite) xf_sprites[sprite]->Alpha
00209 
00210 #define XF_SetSpriteHFlip(sprite, hflip) xf_sprites[sprite]->HFlip = hflip
00211 #define XF_GetSpriteHFlip(sprite) xf_sprites[sprite]->HFlip
00212 
00213 #define XF_SetSpriteVFlip(sprite, vflip) xf_sprites[sprite]->VFlip = vflip
00214 #define XF_GetSpriteVFlip(sprite) xf_sprites[sprite]->VFlip
00215 
00216 #define XF_SetSpriteAngle(sprite, angle) xf_sprites[sprite]->Angle = angle
00217 #define XF_GetSpriteAngle(sprite) xf_sprites[sprite]->Angle
00218 
00219 #define XF_SetSpriteZoom(sprite, zoom) xf_sprites[sprite]->Zoom = zoom
00220 #define XF_GetSpriteZoom(sprite) xf_sprites[sprite]->Zoom
00221 
00222 #define XF_SetSpritePal(sprite, pal) xf_sprites[sprite]->Palette = pal
00223 #define XF_GetSpritePal(sprite) xf_sprites[sprite]->Palette
00224 
00225 #define XF_SetSpriteWindow(sprite, window) xf_sprites[sprite]->Window = window
00226 #define XF_GetSpriteWindow(sprite) xf_sprites[sprite]->Window
00227 
00228 extern inline void XF_SetSpriteHVFlip(s16 sprite, u8 hflip, u8 vflip){
00229         XF_SetSpriteHFlip(sprite, hflip);
00230         XF_SetSpriteVFlip(sprite, vflip);       
00231 }
00232 
00233 
00234 
00235 void XF_SetSpriteLimits(u16 sprite, u8 x0, u8 y0, u8 x1, u8 y1);
00236 
00237 //void XF_UpdateSprites(void);
00238 void XF_ShowSprite(s16 sprite);
00239 XF_Sprite* XF_GifToSprite(void *gif);
00240 
00241 extern inline void XF_CloneSprite(u32 sprite, u32 targetsprite){
00242         if(xf_sprites[sprite] == 0) xf_sprites[sprite] = (sprite_type*)malloc(sizeof(sprite_type));
00243 
00244         if((s16)sprite < xf_minsprite) xf_minsprite = sprite; // On note comme plus bas numéro
00245         if((s16)sprite > xf_maxsprite) xf_maxsprite = sprite; // On note comme plus haut numéro
00246         
00247         *xf_sprites[sprite] = *xf_sprites[targetsprite];
00248 }
00249 
00250 void XF_SetSpriteImage(u32 sprite, XF_Sprite *image);
00251 
00252 
00253  // end of Sprites
00255 
00256 
00257 extern XF_Sprite *xf_sprite_alloc[2048];
00258 extern u16 xf_nsprite_alloc;
00259 
00260 #endif
00261 
00262 

Generated on Wed Dec 12 23:46:35 2007 for XFlib by  doxygen 1.5.4