(20111216) 20:00

This commit is contained in:
2011-12-16 20:00:00 +01:00
parent f67911db62
commit 8ab73e4d2a
12 changed files with 255 additions and 35 deletions

55
Anim.c
View File

@@ -4,16 +4,26 @@
#include "Draw.h"
#include "Anim.h"
////////////////////////////////////////////////
// Animation //
///////////////
//
typedef struct {
DrawImg img;
int w;
int fps;
float fps;
int frames;
int ftime;
int time;
} Animation;
Anim Anim_LoadAnim(char *fichero,int frames,int fps){
/////////////////////////////
// Anim_LoadAnim
//
//
Anim Anim_LoadAnim(char *fichero,int frames,float fps){
DrawImg img;
Animation *anim;
int w,h;
@@ -37,12 +47,22 @@ Anim Anim_LoadAnim(char *fichero,int frames,int fps){
}
/////////////////////////////
// Anim_GetTime
//
//
int Anim_GetTime(Anim a){
Animation *anim=a;
return(anim->time);
}
/////////////////////////////
// Anim_SetOffset
// Anim_GetOffset
//
//
void Anim_SetOffset(Anim a,int x,int y){
Animation *anim=a;
@@ -54,6 +74,11 @@ void Anim_GetOffset(Anim a,int *x,int *y){
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;
@@ -63,14 +88,10 @@ void Anim_Draw(Anim a,int time_ms,int x,int y){
}
/////////////////////////////
// AnimPlay_Copy
//
//
void AnimPlay_Copy(AnimPlay *ad,AnimPlay *ao){
ad->img=ao->img;
ad->anim=ao->anim;
@@ -78,6 +99,11 @@ void AnimPlay_Copy(AnimPlay *ad,AnimPlay *ao){
}
/////////////////////////////
// AnimPlay_SetImg
// AnimPlay_SetAnim
//
//
void AnimPlay_SetImg(AnimPlay *ap,DrawImg img){
ap->anim=NULL;
ap->img=img;
@@ -90,6 +116,10 @@ void AnimPlay_SetAnim(AnimPlay *ap,Anim ani){
}
/////////////////////////////
// AnimPlay_Draw
//
//
void AnimPlay_Draw(AnimPlay *ani,int x,int y){
if(ani->anim){
Anim_Draw(ani->anim,ani->time_ms,x,y);
@@ -99,6 +129,11 @@ void AnimPlay_Draw(AnimPlay *ani,int x,int y){
}
}
/////////////////////////////
// AnimPlay_IncTime
//
//
void AnimPlay_IncTime(AnimPlay *ani,int t){
if(ani->anim){
ani->time_ms+=t;

54
Anim.h
View File

@@ -3,31 +3,83 @@
#include "Draw.h"
////////////////////////////////////////////////
// Anim //
//////////
//
typedef void *Anim;
Anim Anim_LoadAnim(char *fichero,int frames,int fps);
/////////////////////////////
// Anim_LoadAnim
//
//
Anim Anim_LoadAnim(char *fichero,int frames,float fps);
/////////////////////////////
// Anim_GetTime
//
//
int Anim_GetTime(Anim anim);
/////////////////////////////
// Anim_SetOffset
// Anim_GetOffset
//
//
void Anim_SetOffset(Anim anim,int x,int y);
void Anim_GetOffset(Anim anim,int *x,int *y);
/////////////////////////////
// Anim_Draw
//
//
void Anim_Draw(Anim anim,int time_ms,int x,int y);
////////////////////////////////////////////////
// AnimPlay //
//////////////
//
typedef struct {
Anim anim;
DrawImg img;
int time_ms;
} AnimPlay;
/////////////////////////////
// AnimPlay_Copy
//
//
void AnimPlay_Copy(AnimPlay *ad,AnimPlay *ao);
/////////////////////////////
// AnimPlay_SetImg
// AnimPlay_SetAnim
//
//
void AnimPlay_SetImg(AnimPlay *ap,DrawImg img);
void AnimPlay_SetAnim(AnimPlay *ap,Anim ani);
/////////////////////////////
// AnimPlay_Draw
//
//
void AnimPlay_Draw(AnimPlay *ani,int x,int y);
/////////////////////////////
// AnimPlay_IncTime
//
//
void AnimPlay_IncTime(AnimPlay *ani,int t);
#endif

120
Draw.c
View File

@@ -3,6 +3,7 @@
#include <windows.h>
#endif
#include <SDL/SDL.h>
#include <time.h>
#include "Time.h"
#include "Util.h"
@@ -161,11 +162,10 @@ typedef struct Tag_DrawImage {
/////////////////////////////
// Draw_LoadImage
// Draw_LoadSurface
//
// Loads a image, giving a reference.
DrawImg Draw_LoadImage(char *filename){
DrawImage *image;
// Loads a surface.
SDL_Surface *Draw_LoadSurface(char *filename){
SDL_Surface *surf;
// Load the BMP as a surface
@@ -199,6 +199,24 @@ DrawImg Draw_LoadImage(char *filename){
}
}
return(surf);
}
/////////////////////////////
// Draw_LoadImage
//
// Loads a image, giving a reference.
DrawImg Draw_LoadImage(char *filename){
DrawImage *image;
SDL_Surface *surf;
// Loads the surface
surf=Draw_LoadSurface(filename);
if(surf == NULL){
return(NULL);
}
// Create the image container
image=malloc(sizeof(DrawImage));
image->surf=surf;
@@ -316,6 +334,28 @@ void Draw_DrawImgPart(DrawImg img,int x,int y,int w,int i){
}
/////////////////////////////
// Draw_DrawImgTrans
//
// Draws an image transformed.
void Draw_DrawImgTrans(DrawImg img,int x,int y,float angle){
DrawImage *image=img;
SDL_Rect orig;
SDL_Rect dest;
// Prepare the rects
orig.x=0;
orig.y=0;
dest.x=x+image->x;
dest.y=y+image->y;
orig.w=dest.w=image->surf->w;
orig.h=dest.h=image->surf->h;
// Blit the surface on the screen
SDL_BlitSurface(image->surf,&orig,_screen,&dest);
}
////////////////////////////////////////////////
// DrawFnt //
/////////////
@@ -323,14 +363,59 @@ void Draw_DrawImgPart(DrawImg img,int x,int y,int w,int i){
typedef struct {
SDL_Surface *surf;
int w,h;
int min,max;
} DrawFont;
/////////////////////////////
// Draw_DefaultFont
//
// Creates a image with the default font.
// Creates a surface with the default font.
#include "FontData.h"
SDL_Surface *Draw_DefaultFontSurface(
unsigned char r,
unsigned char g,
unsigned char b,
unsigned char a)
{
SDL_Surface *surf;
int x,y,c;
Uint32 color,color2;
// Create the surface
surf = SDL_CreateRGBSurface(SDL_SWSURFACE,
8*256, 8, 32,0,0,0,0);
surf->format->Amask=0xFF000000;
surf->format->Ashift=24;
// Draw the font
SDL_LockSurface(surf);
color =SDL_MapRGBA(surf->format,r,g,b,a);
color2=SDL_MapRGBA(surf->format,r,g,b,0);
for(c=0;c<256;c++){
for(y=0;y<8;y++){
for(x=0;x<8;x++){
if(((fontdata_8x8[c*8+y]>>(7-x)) & 0x01)==1){
//Imagen_PutPixel(dest,c*8+x,y,color);
((Uint32 *)surf->pixels)[(c*8+x)+(8*256*y)]=
color;
}else{
//Imagen_PutPixel(dest,c*8+x,y,color2);
((Uint32 *)surf->pixels)[(c*8+x)+(8*256*y)]=
color2;
}
}
}
}
SDL_UnlockSurface(surf);
return(surf);
}
/////////////////////////////
// Draw_DefaultFont
//
// Creates the default font.
DrawFnt Draw_DefaultFont(
unsigned char r,
unsigned char g,
@@ -338,6 +423,28 @@ DrawFnt Draw_DefaultFont(
unsigned char a)
{
DrawFont *font;
// Create the default font
font=malloc(sizeof(DrawFont));
font->surf = Draw_DefaultFontSurface(r,g,b,a);
font->w=8;
font->h=8;
font->surf->format->Amask=0xFF000000;
font->surf->format->Ashift=24;
SDL_SetAlpha(font->surf, SDL_SRCALPHA, 255);
return((DrawFnt)font);
}
/////////////////////////////
// Draw_LoadFont
//
// Load a font from a file.
DrawFnt Draw_LoadFont(char *fichero,int min,int max){
/*DrawFont *font;
int x,y,c;
Uint32 color,color2;
@@ -372,10 +479,9 @@ DrawFnt Draw_DefaultFont(
}
SDL_UnlockSurface(font->surf);
return((DrawFnt)font);
return((DrawFnt)font);*/
}
/////////////////////////////
// Draw_DrawText
//

16
Draw.h
View File

@@ -87,6 +87,13 @@ void Draw_DrawImg(DrawImg img,int x,int y);
void Draw_DrawImgPart(DrawImg img,int x,int y,int w,int i);
/////////////////////////////
// Draw_DrawImgTrans
//
// Draws an image transformed.
void Draw_DrawImgTrans(DrawImg img,int x,int y,float angle);
////////////////////////////////////////////////
// DrawFnt //
/////////////
@@ -97,7 +104,7 @@ typedef void *DrawFnt;
/////////////////////////////
// Draw_DefaultFont
//
// Loads a image, giving a reference.
// Creates the default font.
DrawFnt Draw_DefaultFont(
unsigned char r,
unsigned char g,
@@ -105,6 +112,13 @@ DrawFnt Draw_DefaultFont(
unsigned char a);
/////////////////////////////
// Draw_LoadFont
//
// Load a font from a file.
DrawFnt Draw_LoadFont(char *fichero,int min,int max);
/////////////////////////////
// Draw_DrawText
//

View File

@@ -131,6 +131,7 @@ void Entity_PostProcess(Entity *e,int ft){
vec2_scale(e->vel,e->vel,
1.0f-(e->fric_dynamic+(e->fric_static/len)));
}
}
// Animate
@@ -146,7 +147,7 @@ void Entity_CollisionResponse(
Entity *b1,Entity *b2,float t,vec2 n)
{
float moment;
vec2 temp,temp2;
vec2 temp;
float elast;
if(b1->mass>0.0f && b2->mass>0.0f){
@@ -194,7 +195,6 @@ int Entity_Collide(Entity *b1,Entity *b2){
float t;
vec2 n;
vec2 cir1[2];
vec2 cir1i,cir2i;
Entity *b_aux;
// FIX: Swap colision order based on moving object

View File

@@ -119,7 +119,7 @@ int GameLib_ProcLoop(){
if(_entity[i]->mass>0.0f){
vec2_plus(_entity[i]->vel,_entity[i]->vel,grav);
}
*/
*/
}
// Process colisions between entities
@@ -136,7 +136,7 @@ int GameLib_ProcLoop(){
}
}
count++;
}while(repeat && count<10);
}while(repeat && count<20);
// Stop remaining collisions
for(i=0;i<_n_entities-1;i++){

0
Makefile.common Normal file → Executable file
View File

View File

@@ -1,6 +1,6 @@
LIBS=-I/mingw/include/SDL -D_GNU_SOURCE=1 -Dmain=SDL_main
CFLAGS= -L/mingw/lib -lmingw32 -lSDLmain -lSDL -mwindows
CC=gcc
LIBS= -L/usr/i486-mingw/lib -D_GNU_SOURCE=1 -Dmain=SDL_main
CFLAGS= -I/usr/i486-mingw/include -lmingw32 -lSDLmain -lSDL -mwindows
CC= i486-mingw32-gcc
RM=rm -rf
RESULT=game.exe

BIN
SDL.dll Normal file

Binary file not shown.

2
Util.c
View File

@@ -40,7 +40,7 @@ int Intersec_RayUnitCircle(vec2 orig,vec2 vel,vec2 center,float *t){
// Solve as a unit circle
a=vec2_dot(vel,vel);
if(fabs(a)<0.0f){
if(fabs(a)<=0.0f){
return(0);
}
vec2_minus(temp,orig,center);

BIN
macosx/SDL_dev.zip Normal file

Binary file not shown.

29
main.c
View File

@@ -1,6 +1,8 @@
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include "GameLib.h"
@@ -37,8 +39,8 @@ void PostProcGame(){
Audio_PlaySound(coin,1,1);
}
Draw_DrawText(font_shad,"Hola Mundo!",11,11);
Draw_DrawText(font ,"Hola Mundo!",10,10);
Draw_DrawText(font_shad,"Buncy Buncy!",41,41);
Draw_DrawText(font ,"Buncy Buncy!",40,40);
}
void player_proc(Entity *e,int ft){
@@ -81,14 +83,14 @@ int main(int argc,char *argv[]){
img_block2=Draw_LoadImage("data/block2.bmp");
Draw_SetOffset(img_block2,-16,-16);
// img_whitey=Draw_LoadImage("data/whitey.bmp");
// Draw_SetOffset(img_whitey,-16,-16);
anim_whitey=Anim_LoadAnim("data/whitey.bmp",4,5);
anim_whitey=Anim_LoadAnim("data/whitey.bmp",4,2.5);
Anim_SetOffset(anim_whitey,-16,-16);
coin=Audio_LoadSound("data/coin.wav");
ent_player=Entity_New();
ent_player->type=Ent_Player;
ent_player->radius=16.0f;
@@ -100,9 +102,10 @@ int main(int argc,char *argv[]){
ent_ball->type=Ent_Ball;
ent_ball->radius=16.0f;
ent_ball->fric_static=0.1f;
ent_ball->elast=1.0f;
ent_ball->elast=0.5f;
AnimPlay_SetImg(&ent_ball->anim,img_rball);
ent_block=Entity_New();
ent_block->type=Ent_Block;
ent_block->mass=-1.0f;
@@ -152,10 +155,20 @@ int main(int argc,char *argv[]){
vec2_set(e->pos,132,100+3*32);
GameLib_AddEntity(e);
e=Entity_Copy(ent_ball);
for(i=0;i<3;i++){
e=Entity_Copy(ent_ball);
vec2_set(e->pos,200+i*33,100);
GameLib_AddEntity(e);
}
for(i=0;i<3;i++){
e=Entity_Copy(ent_ball);
vec2_set(e->pos,200+i*33,133);
GameLib_AddEntity(e);
}
/*e=Entity_Copy(ent_ball);
vec2_set(e->pos,132,100);
GameLib_AddEntity(e);
*/
e=Entity_Copy(ent_player);
vec2_set(e->pos,132,50);
GameLib_AddEntity(e);