diff options
author | Ludovic Pouzenc <lpouzenc@gmail.com> | 2013-07-18 20:55:55 +0200 |
---|---|---|
committer | Ludovic Pouzenc <lpouzenc@gmail.com> | 2013-07-18 20:55:55 +0200 |
commit | 2e8fce8250fdfc6c6d644c9354d4a3318975bae8 (patch) | |
tree | 058b876910dfb3353cab52f425f837205ee7843b /src/test | |
parent | f02db00ad4f41b4d098557a63461f6c5766c3273 (diff) | |
download | mplemmings-2e8fce8250fdfc6c6d644c9354d4a3318975bae8.tar.gz mplemmings-2e8fce8250fdfc6c6d644c9354d4a3318975bae8.tar.bz2 mplemmings-2e8fce8250fdfc6c6d644c9354d4a3318975bae8.zip |
Fin du codage de testrender.c. Diverses mises au point autour de ca.
Bug connu : la police de grande taille ne se charge pas bien. Texture trop longue ?
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/testrender.c | 106 |
1 files changed, 92 insertions, 14 deletions
diff --git a/src/test/testrender.c b/src/test/testrender.c index 93fa217..f4c5173 100644 --- a/src/test/testrender.c +++ b/src/test/testrender.c @@ -4,12 +4,16 @@ #include "utils.h" #define DATA_BASEPATH "./data" +#define MAX_RENDERLIST_LEN 256 + +int buildTestRL(gameRess_t *gRess, int rlMaxLen, render_item_t render_list[]); int main(int argc, char **argv) { int res; char filepath[MAX_PATH_LEN]; gameIni_t gIni; gameRess_t gRess; + render_item_t render_list[MAX_RENDERLIST_LEN]; if (argc != 3) { fprintf(stderr, "Usage %s <levelpack_name> <level_ini_name>\n", argv[0]); @@ -54,12 +58,12 @@ int main(int argc, char **argv) { SDL_Rect sdl_viewport; SDL_Event sdl_ev; - int mainloop_end=0; + int rlLen, mainloop_end=0; - SDL_Rect win_pos = { .x=SDL_WINDOWPOS_UNDEFINED, .y=SDL_WINDOWPOS_UNDEFINED, .w=640, .h=480 }; - Uint32 init_flags = SDL_INIT_TIMER|SDL_INIT_VIDEO;//|SDL_INIT_EVENTS; + SDL_Rect win_pos = { .x=SDL_WINDOWPOS_UNDEFINED, .y=SDL_WINDOWPOS_UNDEFINED, .w=1920, .h=1200 }; + Uint32 init_flags = SDL_INIT_TIMER|SDL_INIT_VIDEO; Uint32 win_flags = SDL_WINDOW_SHOWN; - Uint32 rend_flags = SDL_RENDERER_ACCELERATED; + Uint32 rend_flags = SDL_RENDERER_ACCELERATED; // | SDL_RENDERER_PRESENTVSYNC; my_SDL_init_or_die(__FILE__, win_pos, init_flags, win_flags, rend_flags, &sdl_win, &sdl_rend, &sdl_rend_info, &sdl_viewport); @@ -71,26 +75,28 @@ int main(int argc, char **argv) { res=loadStyleRes(sdl_rend, &gIni, DATA_BASEPATH, &gRess); if (res!=0) exit(res); + rlLen=buildTestRL(&gRess, MAX_RENDERLIST_LEN, render_list); /* Main render loop */ while (!mainloop_end) { + int i; + /* Check for events */ while (SDL_PollEvent(&sdl_ev)) { - if (sdl_ev.type == SDL_QUIT || sdl_ev.type == SDL_KEYDOWN) { + if (sdl_ev.type == SDL_QUIT) { mainloop_end = 1; } } - /* Draw a gray background */ - SDL_SetRenderDrawColor(sdl_rend, 0xA0, 0xA0, 0xA0, 0xFF); SDL_RenderClear(sdl_rend); - - /* Blit the sprite onto the screen */ - SDL_RenderCopy(sdl_rend, gRess.objects[0].t, NULL, NULL); - //SDL_RenderCopy(sdl_rend, t1, &t1_src, &t1_dst); - - /* Update the screen */ + render_all(sdl_rend, render_list, rlLen); SDL_RenderPresent(sdl_rend); - SDL_Delay(50); + for (i=0;i<rlLen;i++) { + render_item_t *it = &render_list[i]; + if (it->animate==1) { + it->currframe = (it->currframe + 1) % it->sprite->frames; + } + } + SDL_Delay(100); } unloadStyleRes(&gRess); unloadMiscRes(&gRess); @@ -101,3 +107,75 @@ int main(int argc, char **argv) { return 0; } + +int addRLitem(render_item_t list[], sprite_t *it, int rlMaxLen) { + static int cur=0, curr_x=0, curr_y=0, tmp_h=0; + + if (it == NULL) { + curr_y += tmp_h; + curr_x = tmp_h = 0; + return cur; + } + if (cur > rlMaxLen || it->t == NULL) return cur; + + list[cur].sprite = it; + list[cur].x = curr_x; + list[cur].y = curr_y; + list[cur].currframe = 0; + + if (it->frames > 1) { + list[cur].animate = 1; /* By defaut, animate */ + } + curr_x += it->size.w + 1; + if (tmp_h < it->size.h) tmp_h = it->size.h; + + cur++; + if (curr_x >= 1920) { + curr_x=0; + curr_y += tmp_h; + tmp_h=0; + } + + return cur; +} + +int buildTestRL(gameRess_t *gRess, int rlMaxLen, render_item_t render_list[]) { + int i, rlLen; + + for (i=0; i<MAX_LEMMANIM_COUNT; i++) { + rlLen=addRLitem(render_list, &gRess->lemmingAnims[i], rlMaxLen); + } + rlLen=addRLitem(render_list, NULL, rlMaxLen); + + for (i=0; i<MAX_LEMMANIM_COUNT; i++) { + rlLen=addRLitem(render_list, &gRess->lemmingMasks[i], rlMaxLen); + } + rlLen=addRLitem(render_list, NULL, rlMaxLen); + + for (i=0; i<MAX_LEMMANIM_COUNT; i++) { + rlLen=addRLitem(render_list, &gRess->lemmingIMasks[i], rlMaxLen); + } + rlLen=addRLitem(render_list, NULL, rlMaxLen); + + for (i=0; i<MAX_OBJECTS_COUNT; i++) { + rlLen=addRLitem(render_list, &gRess->objects[i], rlMaxLen); + } + rlLen=addRLitem(render_list, NULL, rlMaxLen); + + for (i=0; i<MAX_OBJECTS_COUNT; i++) { + rlLen=addRLitem(render_list, &gRess->objectMasks[i], rlMaxLen); + } + rlLen=addRLitem(render_list, NULL, rlMaxLen); + + rlLen=addRLitem(render_list, &gRess->font1, rlMaxLen); + rlLen=addRLitem(render_list, &gRess->font2, rlMaxLen); + rlLen=addRLitem(render_list, &gRess->countdown, rlMaxLen); + rlLen=addRLitem(render_list, &gRess->cursor, rlMaxLen); + + for (i=0; i<MAX_TILES_COUNT; i++) { + rlLen=addRLitem(render_list, &gRess->tiles[i], rlMaxLen); + } + rlLen=addRLitem(render_list, NULL, rlMaxLen); + return rlLen; +} + |