Files
GameLib/Anim.c
2011-12-22 20:00:00 +01:00

181 lines
2.7 KiB
C

// Copyright (C) 2011 Valeriano Alfonso Rodriguez (Kableado)
#include <stdio.h>
#include <stdlib.h>
#include "Draw.h"
#include "Anim.h"
////////////////////////////////////////////////
// Animation //
///////////////
//
typedef struct {
DrawImg img;
int w;
float fps;
int frames;
int ftime;
int time;
} Animation;
/////////////////////////////
// Anim_LoadAnim
//
//
Anim Anim_LoadAnim(char *fichero,int frames,float fps){
DrawImg img;
Animation *anim;
int w,h;
img=Draw_LoadImage(fichero);
if(!img){
return(NULL);
}
Draw_GetSize(img,&w,&h);
// Create the animation container
anim=malloc(sizeof(Animation));
anim->img=img;
anim->w=w/frames;
anim->fps=fps;
anim->frames=frames;
anim->ftime=1000/fps;
anim->time=anim->ftime*frames;
return((Anim)anim);
}
/////////////////////////////
// Anim_GetTime
//
//
int Anim_GetTime(Anim a){
Animation *anim=a;
return(anim->time);
}
/////////////////////////////
// Anim_GetSize
//
// Gets the animation size.
void Anim_GetSize(Anim a,int *w,int *h){
Animation *anim=a;
int waux;
*w=anim->w;
Draw_GetSize(anim->img,&waux,h);
}
/////////////////////////////
// Anim_SetOffset
// Anim_GetOffset
//
//
void Anim_SetOffset(Anim a,int x,int y){
Animation *anim=a;
Draw_SetOffset(anim->img,x,y);
}
void Anim_GetOffset(Anim a,int *x,int *y){
Animation *anim=a;
Draw_GetOffset(anim->img,x,y);
}
/////////////////////////////
// Anim_Draw
//
//
void Anim_Draw(Anim a,int time_ms,int x,int y){
Animation *anim=a;
int frame;
frame=(time_ms%anim->time)/anim->ftime;
Draw_DrawImgPart(anim->img,x,y,anim->w,frame);
}
/////////////////////////////
// AnimPlay_Copy
//
//
void AnimPlay_Copy(AnimPlay *ad,AnimPlay *ao){
ad->img=ao->img;
ad->anim=ao->anim;
ad->time_ms=ao->time_ms;
}
/////////////////////////////
// AnimPlay_SetImg
// AnimPlay_SetAnim
//
//
void AnimPlay_SetImg(AnimPlay *ap,DrawImg img){
ap->anim=NULL;
ap->img=img;
ap->time_ms=0;
}
void AnimPlay_SetAnim(AnimPlay *ap,Anim ani){
ap->anim=ani;
ap->img=NULL;
ap->time_ms=0;
}
/////////////////////////////
// AnimPlay_Draw
//
//
void AnimPlay_Draw(AnimPlay *ani,int x,int y){
if(ani->anim){
Anim_Draw(ani->anim,ani->time_ms,x,y);
}else
if(ani->img){
Draw_DrawImg(ani->img,x,y);
}
}
/////////////////////////////
// AnimPlay_GetOffset
// AnimPlay_GetSize
//
//
void AnimPlay_GetOffset(AnimPlay *ani,int *x,int *y){
if(ani->anim){
Anim_GetOffset(ani->anim,x,y);
}else
if(ani->img){
Draw_GetOffset(ani->img,x,y);
}
}
void AnimPlay_GetSize(AnimPlay *ani,int *w,int *h){
if(ani->anim){
Anim_GetSize(ani->anim,w,h);
}else
if(ani->img){
Draw_GetSize(ani->img,w,h);
}
}
/////////////////////////////
// AnimPlay_IncTime
//
//
void AnimPlay_IncTime(AnimPlay *ani,int t){
if(ani->anim){
ani->time_ms+=t;
}
}