From 9d4669bff0e2979bf598067c8efad50e2ea731f2 Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Wed, 24 Jul 2013 00:04:31 +0200 Subject: Chargement des fichiers Ini géré dans module loader à présent. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/include/data_ini.h | 9 +++++-- src/include/loader.h | 13 +++++----- src/loader.c | 64 ++++++++++++++++++++++++++++++++++++++--------- src/test/testrender.c | 68 +++++++++++++------------------------------------- 4 files changed, 83 insertions(+), 71 deletions(-) diff --git a/src/include/data_ini.h b/src/include/data_ini.h index 1f93caf..722581f 100644 --- a/src/include/data_ini.h +++ b/src/include/data_ini.h @@ -2,12 +2,15 @@ #define DATA_INI_H #include +#include "utils.h" /* MAX_PATH_LEN */ #define LEVEL_WIDTH (1664*2) #define LEVEL_HEIGHT (160*2) #define MAX_NAMELEN 64 +#define MAX_LEVELPACK_COUNT 8 + #define MAX_PARTICLE_COLORS 16 #define MAX_MUSICS_COUNT 32 #define MAX_DIFFICULTY_COUNT 8 @@ -44,6 +47,7 @@ struct levelIni { //////////////////////// LEVELPACK INI FILES //////////////////////// struct levelPackIni { + char id[MAX_NAMELEN]; char name[MAX_NAMELEN]; int maxFallDistance; char codeSeed[MAX_NAMELEN]; @@ -82,9 +86,10 @@ struct miscIni { //////////////////////// GLOBAL INI FILES //////////////////////// typedef struct { - struct styleIni style; - struct levelIni level; + char data_basepath[MAX_PATH_LEN]; struct levelPackIni levelPack; + struct levelIni level; + struct styleIni style; //struct miscIni misc; } gameIni_t; diff --git a/src/include/loader.h b/src/include/loader.h index febd48e..4dd6e79 100644 --- a/src/include/loader.h +++ b/src/include/loader.h @@ -4,13 +4,14 @@ #include "data_ini.h" #include "data_ress.h" +#include "parser.h" -/* Load all textures needed for style from gIni */ -int loadStyleRes(SDL_Renderer *rend, gameIni_t *gIni, char data_basepath[], gameRess_t *gRess); -void unloadStyleRes(gameRess_t *gRess); +int loadLevel(char data_basepath[], char packId[], char levelId[], gameIni_t *gIni); +void unloadLevel(gameIni_t *gIni, gameRess_t *gRess); -/* Load all misc textures (lemmings, fonts, cursor...) */ -int loadMiscRes(SDL_Renderer *rend, char data_basepath[], gameRess_t *gRess); -void unloadMiscRes(gameRess_t *gRess); +int loadStyleRes(SDL_Renderer *rend, gameIni_t *gIni, gameRess_t *gRess); +int loadMiscRes (SDL_Renderer *rend, gameIni_t *gIni, gameRess_t *gRess); +void unloadStyleRes(gameRess_t *gRess); +void unloadMiscRes (gameRess_t *gRess); #endif /*LOADER_H*/ diff --git a/src/loader.c b/src/loader.c index f780ae9..fdf2a6e 100644 --- a/src/loader.c +++ b/src/loader.c @@ -6,25 +6,64 @@ int loadSprite(SDL_Renderer *rend, char *giffilepath, int frames, sprite_t *sprite); int loadSurface(SDL_Renderer *rend, char *giffilepath, SDL_Surface **surf); -int loadStyleRes(SDL_Renderer *rend, gameIni_t *gIni, char data_basepath[], gameRess_t *gRess) { +int loadLevel(char data_basepath[], char packId[], char levelId[], gameIni_t *gIni) { + int res; + char filepath[MAX_PATH_LEN]; + + SDL_strlcpy(gIni->data_basepath, data_basepath, MAX_PATH_LEN); + + SDL_snprintf(filepath, MAX_PATH_LEN, "%s/level/%s/levelpack.ini", data_basepath, packId); + res=loadIni(ini_levelpack, filepath, gIni); + if (res!=0) return res; + + SDL_strlcpy(gIni->levelPack.id, packId, MAX_NAMELEN); + + SDL_snprintf(filepath, MAX_PATH_LEN, "%s/level/%s/%s.ini", gIni->data_basepath, packId, levelId); + res=loadIni(ini_level, filepath, gIni); + if (res!=0) return res; + + // Check if we found a "style =" line in level ini file + MPL_CHECK( + gIni->level.style[0] != '\0', + { return 10; }, + SDL_LOG_PRIORITY_CRITICAL, + "No valid style detected in level ini file" + ); + + // Loading style ini file + SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%s.ini", gIni->data_basepath, gIni->level.style, gIni->level.style); + res=loadIni(ini_style, filepath, gIni); + if (res!=0) return res; + + + return 0; +} + + +void unloadLevel(gameIni_t *gIni, gameRess_t *gRess) { + //FIXME Not yet implemented +} + +/* Load all textures needed for style from gIni */ +int loadStyleRes(SDL_Renderer *rend, gameIni_t *gIni, gameRess_t *gRess) { int i, res; char filepath[MAX_PATH_LEN+1]; char *stylename=gIni->level.style; for(i=0; i < gIni->style.tiles; i++) { - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%s_%d.gif", data_basepath, stylename, stylename, i); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%s_%d.gif", gIni->data_basepath, stylename, stylename, i); res=loadSurface(rend,filepath,&gRess->tiles[i]); if (res != 0) return res; } for(i=0; i < gIni->style.objectCount; i++) { - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%so_%d.gif", data_basepath, stylename, stylename, i); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%so_%d.gif", gIni->data_basepath, stylename, stylename, i); res=loadSprite(rend,filepath,gIni->style.frames[i],&gRess->objects[i]); if (res != 0) return res; /* Some object types needs a mask */ if ( gIni->style.type[i] >= 5 && gIni->style.type[i] <= 8 ) { - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%som_%d.gif", data_basepath, stylename, stylename, i); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%som_%d.gif", gIni->data_basepath, stylename, stylename, i); res=loadSurface(rend,filepath,&gRess->objectMasks[i]); if (res != 0) return res; } @@ -46,7 +85,8 @@ void unloadStyleRes(gameRess_t *gRess) { } } -int loadMiscRes(SDL_Renderer *rend, char data_basepath[], gameRess_t *gRess) { +/* Load all misc textures (lemmings, fonts, cursor...) */ +int loadMiscRes(SDL_Renderer *rend, gameIni_t *gIni, gameRess_t *gRess) { int lemmanim_frames[MAX_LEMMANIM_COUNT] = {8,4,8,8,10,16,16,16,14,8,16,16,8,16,32,24,4}; int lemmanim_hasmask[6] = {6,10,11,13,14,15}; @@ -56,38 +96,38 @@ int loadMiscRes(SDL_Renderer *rend, char data_basepath[], gameRess_t *gRess) { int i,ii,res; for(i=0; idata_basepath, i); res=loadSprite(rend,filepath,lemmanim_frames[i],&gRess->lemmingAnims[i]); if (res != 0) return res; } for(ii=0; ii<6; ii++) { i=lemmanim_hasmask[ii]; - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/mask_%d.gif", data_basepath, i); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/mask_%d.gif", gIni->data_basepath, i); res=loadSurface(rend,filepath,&gRess->lemmingMasks[i]); if (res != 0) return res; } for(ii=0; ii<3; ii++) { i=lemmanim_hasimask[ii]; - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/imask_%d.gif", data_basepath, i); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/imask_%d.gif", gIni->data_basepath, i); res=loadSurface(rend,filepath,&gRess->lemmingIMasks[i]); if (res != 0) return res; } - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/cursor.gif", data_basepath); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/cursor.gif", gIni->data_basepath); res=loadSprite(rend,filepath,8,&gRess->cursor); if (res != 0) return res; - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/countdown.gif", data_basepath); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/countdown.gif", gIni->data_basepath); res=loadSprite(rend,filepath,5,&gRess->countdown); if (res != 0) return res; - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/lemmfont.gif", data_basepath); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/lemmfont.gif", gIni->data_basepath); res=loadSprite(rend,filepath,94,&gRess->font1); if (res != 0) return res; - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/lemmfont2.gif", data_basepath); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/lemmfont2.gif", gIni->data_basepath); res=loadSprite(rend,filepath,94,&gRess->font2); if (res != 0) return res; diff --git a/src/test/testrender.c b/src/test/testrender.c index 5ec71d7..a8fba18 100644 --- a/src/test/testrender.c +++ b/src/test/testrender.c @@ -1,7 +1,6 @@ #include "gameui.h" #include "graphic.h" #include "loader.h" -#include "parser.h" #include "utils.h" #define DATA_BASEPATH "./data" @@ -10,76 +9,43 @@ int buildTestRL(gameRess_t *gRess, int rlMaxLen, renderItem_t renderList[]); int main(int argc, char **argv) { - int res; - char filepath[MAX_PATH_LEN]; gameIni_t gIni; gameRess_t gRess; gameState_t gState; - //renderItem_t renderList[MAX_RENDERLIST_LEN]; + SDL_Window *win; + SDL_Renderer *rend; + SDL_RendererInfo rendInfo; + SDL_Rect viewport; + SDL_Event uiEvent; + + int res, mainLoopEnd, uiTick; + + SDL_Rect winPos = { .x=SDL_WINDOWPOS_UNDEFINED, .y=SDL_WINDOWPOS_UNDEFINED, .w=MPL_WIN_W, .h=MPL_WIN_H }; + Uint32 initFlags = SDL_INIT_TIMER|SDL_INIT_VIDEO; + Uint32 winFlags = SDL_WINDOW_SHOWN; + Uint32 rendFlags = SDL_RENDERER_ACCELERATED; // | SDL_RENDERER_PRESENTVSYNC; if (argc != 3) { fprintf(stderr, "Usage %s \n", argv[0]); return 1; } - // Setting default values + /* Setting default values */ SDL_memset(&gIni,0,sizeof(gameIni_t)); SDL_memset(&gRess,0,sizeof(gameRess_t)); SDL_memset(&gState,0,sizeof(gameState_t)); - // Loading levelpack.ini - SDL_snprintf(filepath, MAX_PATH_LEN, "%s/level/%s/levelpack.ini", DATA_BASEPATH, argv[1]); - res=loadIni(ini_levelpack, filepath, &gIni); - if (res!=0) exit(res); - - // Loading lvl ini file - SDL_snprintf(filepath, MAX_PATH_LEN, "%s/level/%s/%s.ini", DATA_BASEPATH, argv[1], argv[2]); - res=loadIni(ini_level, filepath, &gIni); - if (res!=0) exit(res); - - // Check if we found a "style =" line in level ini file - MPL_CHECK( - gIni.level.style[0] != '\0', - { exit(1); }, - SDL_LOG_PRIORITY_CRITICAL, - "No valid style detected in level ini file" - ); - - // Loading style ini file - SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%s.ini", DATA_BASEPATH, gIni.level.style, gIni.level.style); - res=loadIni(ini_style, filepath, &gIni); - if (res!=0) exit(res); - - /* Loading misc/lemming.ini - SDL_snprintf(filepath, MAX_PATH_LEN, "%s/lemming.ini", PATH_MISC); - res=loadIni(&gIni, filepath); + res=loadLevel(DATA_BASEPATH, argv[1], argv[2], &gIni); if (res!=0) exit(res); - */ - - SDL_Window *win; - SDL_Renderer *rend; - SDL_RendererInfo rendInfo; - SDL_Rect viewport; - - SDL_Event uiEvent; - int mainLoopEnd, uiTick; - - SDL_Rect winPos = { .x=SDL_WINDOWPOS_UNDEFINED, .y=SDL_WINDOWPOS_UNDEFINED, .w=MPL_WIN_W, .h=MPL_WIN_H }; - Uint32 initFlags = SDL_INIT_TIMER|SDL_INIT_VIDEO; - Uint32 winFlags = SDL_WINDOW_SHOWN; - Uint32 rendFlags = SDL_RENDERER_ACCELERATED; // | SDL_RENDERER_PRESENTVSYNC; res=mySDLInit(__FILE__, winPos, initFlags, winFlags, rendFlags, &win, &rend, &rendInfo, &viewport); if (res!=0) exit(res); - res=loadMiscRes(rend, DATA_BASEPATH, &gRess); - if (res!=0) exit(res); - res=loadStyleRes(rend, &gIni, DATA_BASEPATH, &gRess); - if (res!=0) exit(res); + res=loadMiscRes(rend, &gIni, &gRess); if (res!=0) exit(res); + res=loadStyleRes(rend, &gIni, &gRess); if (res!=0) exit(res); - res=paintTerrain(&gIni, &gRess, &gState); - if (res!=0) exit(res); + res=paintTerrain(&gIni, &gRess, &gState); if (res!=0) exit(res); gState.renderListSize=buildTestRL(&gRess, MAX_RENDERLIST_LEN, gState.renderList); -- cgit v1.2.3