diff options
author | Damien Appert <dappert> | 2010-12-28 21:13:29 +0000 |
---|---|---|
committer | Damien Appert <dappert> | 2010-12-28 21:13:29 +0000 |
commit | 38e257b07148d915370707e72f4655f6e5fdad15 (patch) | |
tree | 42143af74065d31bcd38adc21f693877e2fd217f | |
parent | 374a77a4b3cd8dcf8859904ffb1bbf7274ab4719 (diff) | |
download | 2010-netlemmings-38e257b07148d915370707e72f4655f6e5fdad15.tar.gz 2010-netlemmings-38e257b07148d915370707e72f4655f6e5fdad15.tar.bz2 2010-netlemmings-38e257b07148d915370707e72f4655f6e5fdad15.zip |
big cheat
git-svn-id: file:///var/svn/2010-netlemmings/trunk@213 077b3477-7977-48bd-8428-443f22f7bfda
-rw-r--r-- | src/graphic.c | 12 | ||||
-rw-r--r-- | src/include/data_localgame.h | 2 | ||||
-rw-r--r-- | src/include/graphic.h | 4 | ||||
-rw-r--r-- | src/netlem.c | 54 |
4 files changed, 46 insertions, 26 deletions
diff --git a/src/graphic.c b/src/graphic.c index fbe1ae7..bca8e2c 100644 --- a/src/graphic.c +++ b/src/graphic.c @@ -225,7 +225,7 @@ int paintTerrain(gameIni_t *gIni, gameRess_t *gRess, gameGraphics_t *gGraph) { return 0; } -int repaint(gameObjectsState_t *objStates, gameGraphSurfaces_t *srcSurfs, SDL_Rect *srcRect, SDL_Surface *dstSurf) { +int repaint(gameObjectsState_t *objStates, gameGraphSurfaces_t *srcSurfs, SDL_Rect *srcRect, SDL_Surface *dstSurf, SDL_Rect *viewport) { int res; gameObjectsState_t objToRepaint; int i; @@ -236,7 +236,7 @@ int repaint(gameObjectsState_t *objStates, gameGraphSurfaces_t *srcSurfs, SDL_Re for(i=0;i<objToRepaint.objCount;++i) { if(objToRepaint.allObj[i].zOrder>0) break; - res=paintObject(objToRepaint.allObj+i, dstSurf, *srcRect); + res=paintObject(objToRepaint.allObj+i, dstSurf, viewport); if ( res!=0 ) { logs(LOG_DEBUG, "repaint(), paintObject() failed"); } @@ -249,7 +249,7 @@ int repaint(gameObjectsState_t *objStates, gameGraphSurfaces_t *srcSurfs, SDL_Re } for(;i<objToRepaint.objCount;++i) { - res=paintObject(objToRepaint.allObj+i, dstSurf, *srcRect); + res=paintObject(objToRepaint.allObj+i, dstSurf, viewport); if ( res!=0 ) { logs(LOG_DEBUG, "repaint(), paintObject() failed"); } @@ -265,8 +265,10 @@ int findAndZSortObjects(gameObjectsState_t *objectsStat, SDL_Rect *offsetRect, g return 0; } -int paintObject(struct gameObjectState *obj, SDL_Surface *dstSurf, SDL_Rect dstRect) { - +int paintObject(struct gameObjectState *obj, SDL_Surface *dstSurf, SDL_Rect *viewport) { +SDL_Rect dstRect; +dstRect.x=obj->pos.x+viewport->x; +dstRect.y=obj->pos.y+viewport->y; // TODO : blitter tous les objets dans le zOrder, pas que l'objet a rafraichir return SDL_BlitSurface(obj->s, NULL, dstSurf, &dstRect); } diff --git a/src/include/data_localgame.h b/src/include/data_localgame.h index 989444b..fdd00b9 100644 --- a/src/include/data_localgame.h +++ b/src/include/data_localgame.h @@ -42,6 +42,8 @@ struct gameObjectState { pos_t pos, prevPos; // Pointeur vers la surface correspondante (cf data_ress.h) SDL_Surface *s; + // compteur + int cpt; }; typedef struct { diff --git a/src/include/graphic.h b/src/include/graphic.h index 5b59600..0db0c9e 100644 --- a/src/include/graphic.h +++ b/src/include/graphic.h @@ -21,9 +21,9 @@ SDL_Surface * loadGif(char *filePath); int init(char *winCaption, gameConfig_t *conf, gameGraphics_t *gGraph); int paintTerrain(gameIni_t *gIni, gameRess_t *gRess, gameGraphics_t *gGraph); -int repaint(gameObjectsState_t *objStates, gameGraphSurfaces_t *srcSurfs, SDL_Rect *srcRect, SDL_Surface *dstSurf); +int repaint(gameObjectsState_t *objStates, gameGraphSurfaces_t *srcSurfs, SDL_Rect *srcRect, SDL_Surface *dstSurf, SDL_Rect *viewport); int findAndZSortObjects(gameObjectsState_t *objectsStat, SDL_Rect *offsetRect, gameObjectsState_t *objectsFound); -int paintObject(struct gameObjectState *obj, SDL_Surface *dstSurf, SDL_Rect dstRect); +int paintObject(struct gameObjectState *obj, SDL_Surface *dstSurf, SDL_Rect *viewport); int refresh(SDL_Surface *tmpSurf, SDL_Rect *srcRect, SDL_Surface *screen, SDL_Rect dstRect); #endif /*GRAPHIC_H*/ diff --git a/src/netlem.c b/src/netlem.c index 630bae9..74d9636 100644 --- a/src/netlem.c +++ b/src/netlem.c @@ -118,8 +118,9 @@ int main(int argc, char **argv) { //TODO TESTS gObjStates.cursor.s = createSurface(32, 32); - SDL_FillRect(gObjStates.cursor.s, &(gObjStates.cursor.s->clip_rect), 0x11223344); + SDL_FillRect(gObjStates.cursor.s, &(gObjStates.cursor.s->clip_rect), 0x11223344); //11223344 gObjStates.cursor.zOrder=999; + gObjStates.cursor.cpt=0; gObjStates.allObj=&gObjStates.cursor; gObjStates.objCount=1; @@ -190,7 +191,7 @@ int main(int argc, char **argv) { wantWaitMean=0; for(;t<STATS_TICKCOUNT;t++) { wantWaitMean+=wantWait[t]; } t=0; wantWaitMean/=(double) STATS_TICKCOUNT; snprintf(logMsg, 128, "tick:%d\tlastServerTick:%d\tdrift_ms:%d\tFPS:%.1f\t wantWait:%.1f ms (%.1f %%)\n", tick, lastServerTick, drift_ms, fps, wantWaitMean, wantWaitMean*100.0/TICK_DURATION_MS); - logs(LOG_DEBUG, logMsg); + // logs(LOG_DEBUG, logMsg); } } @@ -339,9 +340,9 @@ int loadLevel(struct _loadLevelProc_args *args) { *(args->loadProgress)=1; // Loading lvl ini file - len=strlen(PATH_LEVEL)+strlen("1_orig")+strlen("lvl0003")+strlen("//.ini")+1; + len=strlen(PATH_LEVEL)+strlen("1_orig")+strlen("lvl0072")+strlen("//.ini")+1; filepath=malloc(sizeof(char)*len); - snprintf(filepath, len, "%s/%s/%s.ini", PATH_LEVEL, "1_orig", "lvl0003"); + snprintf(filepath, len, "%s/%s/%s.ini", PATH_LEVEL, "1_orig", "lvl0072"); res=loadIni(args->gIni, filepath); free(filepath); @@ -468,12 +469,12 @@ void processLocalEvents(SDL_Rect *terrain, SDL_Rect *viewport, gameObjectsState_ } break; case SDL_MOUSEMOTION: - mouseX = event.motion.x; - mouseY = event.motion.y; - objStates->cursor.pos.x = mouseX - objStates->cursor.s->w/2; - objStates->cursor.pos.y = mouseY - objStates->cursor.s->h/2; - objStates->cursor.dirty=1; - + objStates->cursor.cpt++; + mouseX = event.motion.x; + mouseY = event.motion.y; + objStates->cursor.pos.x = mouseX - objStates->cursor.s->w/2; + objStates->cursor.pos.y = mouseY - objStates->cursor.s->h/2; + objStates->cursor.dirty=1; break; case SDL_MOUSEBUTTONDOWN: //err=mouse_action(&gInit, mouseX, mouseY,camera.x,camera.y ); @@ -509,8 +510,9 @@ void processLocalEvents(SDL_Rect *terrain, SDL_Rect *viewport, gameObjectsState_ } int updateGraphics(gameObjectsState_t *objStates, localParams_t *params, gameGraphics_t *gGraph) { - int i, res; + int i, res=1; static SDL_Rect lastViewport= {0,0,0,0}; + char logMsg[256]; SDL_Rect srcRect, dstRect; SDL_Surface *tmpSurf; struct gameObjectState *o; @@ -531,23 +533,37 @@ int updateGraphics(gameObjectsState_t *objStates, localParams_t *params, gameGra for(i=0; i<objStates->objCount; i++) { o=objStates->allObj+i; if ( /*TODO intersect(viewport, dstRect) &&*/ o->dirty == 1 ) { - dstRect.x=o->pos.x; - dstRect.y=o->pos.y; + dstRect.x=o->prevPos.x; + dstRect.y=o->prevPos.y; //TODO : pas cencé setter w et h ici dstRect.w=o->s->clip_rect.w; dstRect.h=o->s->clip_rect.h; - srcRect.x=o->pos.x+lastViewport.x; - srcRect.y=o->pos.y+lastViewport.y; + srcRect.x=o->prevPos.x+gGraph->viewport.x;//-o->s->clip_rect.w; + srcRect.y=o->prevPos.y+gGraph->viewport.y; srcRect.w=o->s->clip_rect.w; srcRect.h=o->s->clip_rect.h; + snprintf(logMsg, 256, "refresh item %d / %d \n\t Carateristiques:\n\t-Cpt %d\n\t-viewport {%d;%d}\n\t-lastViewport {%d;%d}\n\t-dstRect {%d;%d;%d;%d}\n\t-srcRect {%d;%d;%d;%d} \n",i+1,objStates->objCount,o->cpt,gGraph->viewport.x,gGraph->viewport.y,lastViewport.x,lastViewport.y,dstRect.x,dstRect.y,dstRect.w,dstRect.h,srcRect.x,srcRect.y,srcRect.w,srcRect.h); + logs(LOG_DEBUG, logMsg); + res=repaint(objStates, &gGraph->surfaces, &srcRect,tmpSurf,&gGraph->viewport); + if ( res != 0 ) { + logs(LOG_WARN, "updateGraphics(), repaint() failed"); + } + dstRect.x=o->pos.x; + dstRect.y=o->pos.y; - res=repaint(objStates, &gGraph->surfaces, &srcRect, tmpSurf); + srcRect.x=o->pos.x+gGraph->viewport.x; + srcRect.y=o->pos.y+gGraph->viewport.y; + res=repaint(objStates, &gGraph->surfaces, &srcRect,tmpSurf,&gGraph->viewport); if ( res != 0 ) { logs(LOG_WARN, "updateGraphics(), repaint() failed"); } + o->prevPos.x=o->pos.x; + o->prevPos.y=o->pos.y; if ( (params->debugFlags & DEBUG_DIRTYRECTANGLES) == 0 ) { + //srcRect.x=lastViewport.x; + //srcRect.y=lastViewport.y; refresh(tmpSurf, &srcRect, gGraph->screen, dstRect); } o->dirty=0; @@ -556,14 +572,14 @@ int updateGraphics(gameObjectsState_t *objStates, localParams_t *params, gameGra } else { dstRect.x=0; dstRect.y=0; - srcRect.x=lastViewport.x; - srcRect.y=lastViewport.y; + srcRect.x=gGraph->viewport.x; + srcRect.y=gGraph->viewport.y; srcRect.w=gGraph->screen->clip_rect.w; srcRect.h=gGraph->screen->clip_rect.h; if ( lastViewport.x != gGraph->viewport.x ) { lastViewport.x=gGraph->viewport.x; - res=repaint(objStates, &gGraph->surfaces, &srcRect, tmpSurf); + res=repaint(objStates, &gGraph->surfaces, &srcRect, tmpSurf,&gGraph->viewport); if ( res != 0 ) { logs(LOG_WARN, "updateGraphics(), repaint() failed"); } |