From 77d83619a2225efce294b9698defb745e1dcefbd Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Wed, 24 Jul 2013 13:47:53 +0200 Subject: Debut testplay et utilisation de gameui (bcp de choses à implémenter dedans !) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + Makefile.am | 8 ++- src/gameui.c | 7 +++ src/include/gameui.h | 2 + src/test/testplay.c | 152 +++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 167 insertions(+), 3 deletions(-) create mode 100644 src/test/testplay.c diff --git a/.gitignore b/.gitignore index ba09d14..c2b750d 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ sbsprite sbspritegif testparseall testrender +testplay # Temporaries and build objects *.swp diff --git a/Makefile.am b/Makefile.am index e0d9669..4be3e49 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4,12 +4,13 @@ ACLOCAL_AMFLAGS = -I m4 --install bin_PROGRAMS = mplemmings mplemmings_ds # Target list of programs that will not installed anywhere (dev helping tiny programs) -noinst_PROGRAMS = sbmoose sbsprite sbspritegif testparseall testrender +noinst_PROGRAMS = sbmoose sbsprite sbspritegif testparseall testrender testplay # Use configure detected necessary cflags and ldflags AM_CFLAGS = -Wall -Werror -I src/include/ -I src/minini/dev/ $(DEPS_CFLAGS) LIBS = $(DEPS_LIBS) -PARSER_MODULES=src/minini/dev/minIni.c src/minini/dev/my_SDL_stdinc.c src/parser.c +PARSER_MODULES = src/minini/dev/minIni.c src/minini/dev/my_SDL_stdinc.c src/parser.c +LOCALGAME_MODULES = $(PARSER_MODULES) src/loader.c src/graphic.c src/gameui.c # Per target specs mplemmings_SOURCES = src/mplemmings.c @@ -19,7 +20,8 @@ sbmoose_SOURCES = src/sandbox/moose.c sbsprite_SOURCES = src/sandbox/sprite.c sbspritegif_SOURCES = src/sandbox/sprite_gif.c testparseall_SOURCES = $(PARSER_MODULES) src/test/testparseall.c -testrender_SOURCES = $(PARSER_MODULES) src/loader.c src/graphic.c src/gameui.c src/test/testrender.c +testrender_SOURCES = $(LOCALGAME_MODULES) src/test/testrender.c +testplay_SOURCES = $(LOCALGAME_MODULES) src/test/testplay.c # Extra files to be shipped in the tarball (make dist) EXTRA_DIST = m4/.dont-remove rm-all-generated-files.sh diff --git a/src/gameui.c b/src/gameui.c index e5d6164..4d8b417 100644 --- a/src/gameui.c +++ b/src/gameui.c @@ -1,8 +1,15 @@ #include "gameui.h" +int setInitialState(gameIni_t *gIni, gameState_t *gState) { + gState->cameraX = gIni->level.xPos; + //FIXME : al lemmings states, skill counters... + return 0; +} + int buildRenderList(gameIni_t *gIni, gameRess_t *gRess, gameState_t *gState) { return -1; //FIXME : Not yet implemented } + void disposeRenderList(gameState_t *gState) { } diff --git a/src/include/gameui.h b/src/include/gameui.h index c9f607e..e36bc8c 100644 --- a/src/include/gameui.h +++ b/src/include/gameui.h @@ -6,6 +6,8 @@ #include "data_ress.h" #include "data_game.h" +int setInitialState(gameIni_t *gIni, gameState_t *gState); + /* Create list of all in-game sprite to render (for batch processing) */ int buildRenderList(gameIni_t *gIni, gameRess_t *gRess, gameState_t *gState); void disposeRenderList(gameState_t *gState); diff --git a/src/test/testplay.c b/src/test/testplay.c new file mode 100644 index 0000000..4ade8df --- /dev/null +++ b/src/test/testplay.c @@ -0,0 +1,152 @@ +#include "gameui.h" +#include "graphic.h" +#include "loader.h" +#include "utils.h" + +#define DATA_BASEPATH "./data" + +int main(int argc, char **argv) { + gameIni_t gIni; + gameRess_t gRess; + gameState_t gState; + + SDL_Window *win; + SDL_Renderer *rend; + SDL_RendererInfo rendInfo; + SDL_Rect viewport; + SDL_Event uiEvent; + + int res, mainLoopEnd, uiTick; + + Uint32 initFlags = SDL_INIT_TIMER|SDL_INIT_VIDEO; + Uint32 winFlags = SDL_WINDOW_SHOWN; + Uint32 rendFlags = SDL_RENDERER_ACCELERATED; // | SDL_RENDERER_PRESENTVSYNC; + SDL_Rect winPos = { + .x=SDL_WINDOWPOS_UNDEFINED, + .y=SDL_WINDOWPOS_UNDEFINED, + .w=MPL_WIN_W, + .h=MPL_WIN_H + }; + + if (argc != 3) { + fprintf(stderr, "Usage %s \n", argv[0]); + return 1; + } + + /* Setting default values */ + SDL_memset(&gIni,0,sizeof(gameIni_t)); + SDL_memset(&gRess,0,sizeof(gameRess_t)); + SDL_memset(&gState,0,sizeof(gameState_t)); + + res=loadLevel(DATA_BASEPATH, argv[1], argv[2], &gIni); + if (res!=0) exit(res); + + res=mySDLInit(__FILE__, winPos, initFlags, winFlags, rendFlags, &win, &rend, &rendInfo, &viewport); + 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=setInitialState(&gIni, &gState); if (res!=0) exit(res); + res=paintTerrain(&gIni, &gRess, &gState); if (res!=0) exit(res); + res=renderTerrainToTexture(rend, &gState); if (res!=0) exit(res); + res=buildRenderList(&gIni, &gRess, &gState); if (res!=0) exit(res); + + /* Main render loop */ + uiTick = 0; + mainLoopEnd = 0; + while (!mainLoopEnd) { + + /* Check for events */ + while (SDL_PollEvent(&uiEvent)) { + if (uiEvent.type == SDL_QUIT) { + mainLoopEnd = 1; + } + } + + (void) renderTerrainToTexture(rend, &gState); + + SDL_RenderClear(rend); + (void) renderSprites(rend, &gState); + SDL_RenderPresent(rend); + + if (uiTick % 4 == 0) { + int i; + gState.tick++; + for (i=0;ianimate==1) { + it->currframe = (it->currframe + 1) % it->sprite->frames; + } + } + } + SDL_Delay(25); + gState.cameraX = (gState.cameraX + 1) % (LEVEL_WIDTH - MPL_WIN_W); + uiTick++; + } + disposeRenderList(&gState); + unloadStyleRes(&gRess); + unloadMiscRes(&gRess); + + SDL_DestroyRenderer(rend); + SDL_DestroyWindow(win); + SDL_Quit(); + + return 0; +} + +int addRLitem(renderItem_t list[], sprite_t *it, int rlMaxLen) { + static int cur=0, curr_x=0, curr_y=0, tmp_h=0; + + if (it == NULL) { + if (cur>1) curr_y += tmp_h; + curr_x = tmp_h = 0; + return cur; + } else if (curr_x >= 640) { + curr_x = 0; + curr_y += tmp_h; + tmp_h=0; + } + 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; + list[cur].absolute = 1; + + 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++; + + return cur; +} + +int buildTestRL(gameRess_t *gRess, gameState_t *gState, int rlMaxLen, renderItem_t renderList[]) { + int i, rlLen; + + rlLen=addRLitem(renderList, &gState->terrainSprite, rlMaxLen); + rlLen=addRLitem(renderList, NULL, rlMaxLen); + + for (i=0; ilemmingAnims[i], rlMaxLen); + } + rlLen=addRLitem(renderList, NULL, rlMaxLen); + + for (i=0; iobjects[i], rlMaxLen); + } + rlLen=addRLitem(renderList, NULL, rlMaxLen); + + rlLen=addRLitem(renderList, &gRess->font1, rlMaxLen); + rlLen=addRLitem(renderList, &gRess->font2, rlMaxLen); + rlLen=addRLitem(renderList, &gRess->countdown, rlMaxLen); + rlLen=addRLitem(renderList, &gRess->cursor, rlMaxLen); + + return rlLen; +} + -- cgit v1.2.3