summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLudovic Pouzenc <lpouzenc@gmail.com>2013-07-24 13:47:53 +0200
committerLudovic Pouzenc <lpouzenc@gmail.com>2013-07-24 13:47:53 +0200
commit77d83619a2225efce294b9698defb745e1dcefbd (patch)
treeab77a0987997bc39267f6ffd73d6ebaeccd3a7c7 /src
parent1859688be9b7c27d1ca69fe0315dff93f464af5b (diff)
downloadmplemmings-77d83619a2225efce294b9698defb745e1dcefbd.tar.gz
mplemmings-77d83619a2225efce294b9698defb745e1dcefbd.tar.bz2
mplemmings-77d83619a2225efce294b9698defb745e1dcefbd.zip
Debut testplay et utilisation de gameui (bcp de choses à implémenter dedans !)
Diffstat (limited to 'src')
-rw-r--r--src/gameui.c7
-rw-r--r--src/include/gameui.h2
-rw-r--r--src/test/testplay.c152
3 files changed, 161 insertions, 0 deletions
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 <levelpack_name> <level_ini_name>\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;i<gState.renderListSize;i++) {
+ renderItem_t *it = &gState.renderList[i];
+ if (it->animate==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; i<MAX_LEMMANIM_COUNT; i++) {
+ rlLen=addRLitem(renderList, &gRess->lemmingAnims[i], rlMaxLen);
+ }
+ rlLen=addRLitem(renderList, NULL, rlMaxLen);
+
+ for (i=0; i<MAX_OBJECTS_COUNT; i++) {
+ rlLen=addRLitem(renderList, &gRess->objects[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;
+}
+