summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Pouzenc <lpouzenc@gmail.com>2013-07-25 23:28:05 +0200
committerLudovic Pouzenc <lpouzenc@gmail.com>2013-07-25 23:28:05 +0200
commit23d9d1d3e1b9cc2efd80ad8e2f0480623858cdab (patch)
tree4464a01859aa7618d393eaf0aea327cfe00748b5
parentc1961c3669397b003df82ada7df14f3069b9beae (diff)
downloadmplemmings-23d9d1d3e1b9cc2efd80ad8e2f0480623858cdab.tar.gz
mplemmings-23d9d1d3e1b9cc2efd80ad8e2f0480623858cdab.tar.bz2
mplemmings-23d9d1d3e1b9cc2efd80ad8e2f0480623858cdab.zip
Debut de renderlist du vrai jeu, choix d'accéder aux items de l'IU via la renderlist, avec des index fixés par un enum.
-rw-r--r--src/gameui.c24
-rw-r--r--src/graphic.c4
-rw-r--r--src/include/data_ui.h12
-rw-r--r--src/test/testplay.c29
-rw-r--r--src/test/testrender.c6
5 files changed, 47 insertions, 28 deletions
diff --git a/src/gameui.c b/src/gameui.c
index 24eb9e0..fa96244 100644
--- a/src/gameui.c
+++ b/src/gameui.c
@@ -1,21 +1,21 @@
#include "gameui.h"
-#define SET_RENDER_ITEM(item,sp,px,py,f,abs,curid,mouseevt) \
+#define SET_RENDER_ITEM(idx,sp,px,py,f,abs,curid,mouseevt) \
do { \
- item.sprite = sp; \
- item.x = px; item.y = py; \
- item.currframe = f; \
- item.absolute = abs; \
- item.onhovercursorid = curid; \
- item.onmousebuttonevent_proc = mouseevt; \
+ gUI->renderList[idx].sprite = &(sp); \
+ gUI->renderList[idx].x = px; \
+ gUI->renderList[idx].y = py; \
+ gUI->renderList[idx].currframe = f; \
+ gUI->renderList[idx].absolute = abs; \
+ gUI->renderList[idx].onhovercursorid = curid; \
+ gUI->renderList[idx].onmousebuttonevent_proc = mouseevt; \
} while(0)
-
-int buildGameRenderList(gameRess_t *gRess, gameUI_t *gUI) {
- int cur=0;
- SET_RENDER_ITEM(gUI->renderList[cur++],&gUI->terrainSprite,0,0,0,0,0,NULL);
- SET_RENDER_ITEM(gUI->renderList[cur++],&gRess->cursor,0,0,0,0,0,NULL);
+int buildGameRenderList(gameRess_t *gRess, gameUI_t *gUI) {
+ SET_RENDER_ITEM(RLI_terrain, gUI->terrainSprite,0,0,0,1,0,NULL);
+
+ SET_RENDER_ITEM(RLI_cursor, gRess->cursor,0,0,0,1,0,NULL);
return 0;
}
diff --git a/src/graphic.c b/src/graphic.c
index 8c995b3..b01714e 100644
--- a/src/graphic.c
+++ b/src/graphic.c
@@ -276,7 +276,9 @@ int renderSprites(SDL_Renderer *rend, gameUI_t *gUI) {
renderItem_t *renderList = gUI->renderList;
- for(i=0,res=0 ; i < gUI->renderListSize && res==0 ; i++) {
+ for(i=0,res=0 ; i < MAX_RENDERLIST_SIZE && res==0 ; i++) {
+ if (renderList[i].sprite == NULL) continue;
+
src = dst = renderList[i].sprite->size;
src.y = src.h * renderList[i].currframe;
if ( renderList[i].absolute ) {
diff --git a/src/include/data_ui.h b/src/include/data_ui.h
index b8e83f8..8f96d48 100644
--- a/src/include/data_ui.h
+++ b/src/include/data_ui.h
@@ -16,22 +16,24 @@ typedef struct {
void (*onmousebuttonevent_proc)(Uint8 button, Uint8 state, void *userptr);
} renderItem_t;
+enum gameRLIdx {RLI_terrain=0, RLI_lem0, RLI_cursor=MAX_RENDERLIST_SIZE-1};
+
typedef struct {
/* Render list of all in-game sprites (for batch processing)
Items are in paint order
created by buildRenderList() */
- int renderListSize;
renderItem_t renderList[MAX_RENDERLIST_SIZE];
+ /* Various */
+
/* Current camera position */
int cameraX;
- /* streamTerrain : viewable portion of terrain, in texture format
- updated by renderTerraiToTexture() */
+ /* Viewable portion of terrain, see renderTerrainToTextures() */
sprite_t terrainSprite;
- int remainingTime;
- int numLemmOut;
+ /* Computed or accumalted values from gameState_t infos */
+ int remainingTime, numLemmOut;
} gameUI_t;
diff --git a/src/test/testplay.c b/src/test/testplay.c
index 1d32104..aa73ec8 100644
--- a/src/test/testplay.c
+++ b/src/test/testplay.c
@@ -45,18 +45,21 @@ int main(int argc, char **argv) {
if (res!=0) exit(res);
res=mySDLInit(__FILE__, winPos, initFlags, winFlags, rendFlags, &win, &rend, &rendInfo, &viewport);
+ SDL_ShowCursor(SDL_DISABLE);
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=setInitialState(&gIni, &gState); if (res!=0) exit(res);
+
gUI.cameraX = gIni.level.xPos;
-
- res=paintTerrain(&gIni, &gRess, &gState); if (res!=0) exit(res);
res=renderTerrainToTextures(rend, gState.terrain, &gUI);
if (res!=0) exit(res);
- res=buildGameRenderList(&gRess, &gUI) ;if (res!=0) exit(res);
+
+ res=buildGameRenderList(&gRess, &gUI); if (res!=0) exit(res);
/* Main render loop */
uiTick = 0;
@@ -65,8 +68,20 @@ int main(int argc, char **argv) {
/* Check for events */
while (SDL_PollEvent(&uiEvent)) {
- if (uiEvent.type == SDL_QUIT) {
- mainLoopEnd = 1;
+ switch (uiEvent.type) {
+ renderItem_t *cur;
+ case SDL_QUIT:
+ mainLoopEnd = 1;
+ break;
+ case SDL_MOUSEMOTION:
+ cur = &gUI.renderList[RLI_cursor];
+ cur->x = uiEvent.motion.x - cur->sprite->size.w / 2;
+ cur->y = uiEvent.motion.y - cur->sprite->size.h / 2;
+ break;
+ case SDL_MOUSEBUTTONDOWN:
+ case SDL_MOUSEBUTTONUP:
+ //uiEvent.button
+ break;
}
}
@@ -79,9 +94,9 @@ int main(int argc, char **argv) {
if (uiTick % 4 == 0) {
int i;
gState.tick++;
- for (i=0;i<gUI.renderListSize;i++) {
+ for (i=0;i<MAX_RENDERLIST_SIZE;i++) {
renderItem_t *it = &gUI.renderList[i];
- if (it->animate==1) {
+ if ( it->sprite != NULL && it->animate==1) {
it->currframe = (it->currframe + 1) % it->sprite->frames;
}
}
diff --git a/src/test/testrender.c b/src/test/testrender.c
index c46263d..028b31b 100644
--- a/src/test/testrender.c
+++ b/src/test/testrender.c
@@ -19,7 +19,7 @@ int main(int argc, char **argv) {
SDL_Rect viewport;
SDL_Event uiEvent;
- int res, mainLoopEnd, uiTick;
+ int res, mainLoopEnd, uiTick, renderListSize;
Uint32 initFlags = SDL_INIT_TIMER|SDL_INIT_VIDEO;
Uint32 winFlags = SDL_WINDOW_SHOWN;
@@ -55,7 +55,7 @@ int main(int argc, char **argv) {
res=renderTerrainToTextures(rend, gState.terrain, &gUI);
if (res!=0) exit(res);
- gUI.renderListSize=buildTestRL(&gRess, &gUI, MAX_RENDERLIST_SIZE);
+ renderListSize=buildTestRL(&gRess, &gUI, MAX_RENDERLIST_SIZE);
gUI.cameraX = gIni.level.xPos;
@@ -80,7 +80,7 @@ int main(int argc, char **argv) {
if (uiTick % 4 == 0) {
int i;
gState.tick++;
- for (i=0;i<gUI.renderListSize;i++) {
+ for (i=0;i<renderListSize;i++) {
renderItem_t *it = &gUI.renderList[i];
if (it->animate==1) {
it->currframe = (it->currframe + 1) % it->sprite->frames;