summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Appert <dappert>2010-12-28 22:32:41 +0000
committerDamien Appert <dappert>2010-12-28 22:32:41 +0000
commit9ce6c3e5496ded36b42baa05b8cdd011bc9c5524 (patch)
treed7ee89b8fb79a6f659334d3dadc227c32015d0a5
parent38e257b07148d915370707e72f4655f6e5fdad15 (diff)
download2010-netlemmings-9ce6c3e5496ded36b42baa05b8cdd011bc9c5524.tar.gz
2010-netlemmings-9ce6c3e5496ded36b42baa05b8cdd011bc9c5524.tar.bz2
2010-netlemmings-9ce6c3e5496ded36b42baa05b8cdd011bc9c5524.zip
cursor on ./scripts/compil.sh launch
git-svn-id: file:///var/svn/2010-netlemmings/trunk@214 077b3477-7977-48bd-8428-443f22f7bfda
-rw-r--r--src/graphic.c15
-rw-r--r--src/include/data_localgame.h2
-rw-r--r--src/include/graphic.h4
-rw-r--r--src/netlem.c87
4 files changed, 65 insertions, 43 deletions
diff --git a/src/graphic.c b/src/graphic.c
index bca8e2c..f067057 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, SDL_Rect *viewport) {
+int repaint(gameObjectsState_t *objStates, gameGraphSurfaces_t *srcSurfs, SDL_Rect *srcRect, SDL_Surface *dstSurf) {
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, viewport);
+ res=paintObject(objToRepaint.allObj+i, dstSurf, *srcRect);
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, viewport);
+ res=paintObject(objToRepaint.allObj+i, dstSurf, *srcRect);
if ( res!=0 ) {
logs(LOG_DEBUG, "repaint(), paintObject() failed");
}
@@ -265,10 +265,11 @@ int findAndZSortObjects(gameObjectsState_t *objectsStat, SDL_Rect *offsetRect, g
return 0;
}
-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;
+int paintObject(struct gameObjectState *obj, SDL_Surface *dstSurf, SDL_Rect dstRect) {
+ //TODO SDL_Rect dstRect;
+ dstRect.x = obj->pos.x;
+ dstRect.y = obj->pos.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 fdd00b9..989444b 100644
--- a/src/include/data_localgame.h
+++ b/src/include/data_localgame.h
@@ -42,8 +42,6 @@ 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 0db0c9e..5b59600 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, SDL_Rect *viewport);
+int repaint(gameObjectsState_t *objStates, gameGraphSurfaces_t *srcSurfs, SDL_Rect *srcRect, SDL_Surface *dstSurf);
int findAndZSortObjects(gameObjectsState_t *objectsStat, SDL_Rect *offsetRect, gameObjectsState_t *objectsFound);
-int paintObject(struct gameObjectState *obj, SDL_Surface *dstSurf, SDL_Rect *viewport);
+int paintObject(struct gameObjectState *obj, SDL_Surface *dstSurf, SDL_Rect dstRect);
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 74d9636..448db03 100644
--- a/src/netlem.c
+++ b/src/netlem.c
@@ -118,9 +118,8 @@ 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); //11223344
+ SDL_FillRect(gObjStates.cursor.s, &(gObjStates.cursor.s->clip_rect), 0x11223344);
gObjStates.cursor.zOrder=999;
- gObjStates.cursor.cpt=0;
gObjStates.allObj=&gObjStates.cursor;
gObjStates.objCount=1;
@@ -190,8 +189,8 @@ int main(int argc, char **argv) {
fps=(STATS_TICKCOUNT*1000.0)/(timeBefore_ms[t]-timeBefore_ms[(t+1)%STATS_TICKCOUNT]);
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);
+ // FIXME : afficher en bas de la fenetre graphique : 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);
}
}
@@ -340,9 +339,9 @@ int loadLevel(struct _loadLevelProc_args *args) {
*(args->loadProgress)=1;
// Loading lvl ini file
- len=strlen(PATH_LEVEL)+strlen("1_orig")+strlen("lvl0072")+strlen("//.ini")+1;
+ len=strlen(PATH_LEVEL)+strlen("1_orig")+strlen("lvl0003")+strlen("//.ini")+1;
filepath=malloc(sizeof(char)*len);
- snprintf(filepath, len, "%s/%s/%s.ini", PATH_LEVEL, "1_orig", "lvl0072");
+ snprintf(filepath, len, "%s/%s/%s.ini", PATH_LEVEL, "1_orig", "lvl0003");
res=loadIni(args->gIni, filepath);
free(filepath);
@@ -469,12 +468,10 @@ void processLocalEvents(SDL_Rect *terrain, SDL_Rect *viewport, gameObjectsState_
}
break;
case SDL_MOUSEMOTION:
- 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;
+ mouseX = event.motion.x;
+ mouseY = event.motion.y;
+ objStates->cursor.dirty=1;
+
break;
case SDL_MOUSEBUTTONDOWN:
//err=mouse_action(&gInit, mouseX, mouseY,camera.x,camera.y );
@@ -506,16 +503,18 @@ void processLocalEvents(SDL_Rect *terrain, SDL_Rect *viewport, gameObjectsState_
break;
}
+ objStates->cursor.pos.x = mouseX - objStates->cursor.s->w/2 + viewport->x;
+ objStates->cursor.pos.y = mouseY - objStates->cursor.s->h/2 + viewport->y;
return;
}
int updateGraphics(gameObjectsState_t *objStates, localParams_t *params, gameGraphics_t *gGraph) {
- int i, res=1;
+ int i, res;
static SDL_Rect lastViewport= {0,0,0,0};
- char logMsg[256];
SDL_Rect srcRect, dstRect;
SDL_Surface *tmpSurf;
struct gameObjectState *o;
+ char logMsg[256];
//static Uint32 tmpColor=0;
//TODO : modifier les calques
@@ -533,39 +532,62 @@ 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->prevPos.x;
- dstRect.y=o->prevPos.y;
+
+ dstRect.x=o->prevPos.x-gGraph->viewport.x;
+ dstRect.y=o->prevPos.y-gGraph->viewport.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->prevPos.x+gGraph->viewport.x;//-o->s->clip_rect.w;
- srcRect.y=o->prevPos.y+gGraph->viewport.y;
+ srcRect.x=o->prevPos.x;//-lastViewport.x;
+ srcRect.y=o->prevPos.y;//-lastViewport.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);
+
+
+ res=repaint(objStates, &gGraph->surfaces, &srcRect, tmpSurf);
if ( res != 0 ) {
logs(LOG_WARN, "updateGraphics(), repaint() failed");
}
- dstRect.x=o->pos.x;
- dstRect.y=o->pos.y;
- 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 ( (params->debugFlags & DEBUG_DIRTYRECTANGLES) == 0 ) {
+ refresh(tmpSurf, &srcRect, gGraph->screen, dstRect);
+ }
+
+ dstRect.x=o->pos.x-gGraph->viewport.x;
+ dstRect.y=o->pos.y-gGraph->viewport.y;
+
+ //dstRect.w=o->s->clip_rect.w;
+ //dstRect.h=o->s->clip_rect.h;
+
+ srcRect.x=o->pos.x;
+ srcRect.y=o->pos.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-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,
+ 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);
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->prevPos.x = o->pos.x;
+ o->prevPos.y = o->pos.y;
+
o->dirty=0;
}
}
@@ -579,12 +601,13 @@ int updateGraphics(gameObjectsState_t *objStates, localParams_t *params, gameGra
if ( lastViewport.x != gGraph->viewport.x ) {
lastViewport.x=gGraph->viewport.x;
- res=repaint(objStates, &gGraph->surfaces, &srcRect, tmpSurf,&gGraph->viewport);
+ // update surface : tmpSurf
+ res=repaint(objStates, &gGraph->surfaces, &srcRect, tmpSurf);
if ( res != 0 ) {
logs(LOG_WARN, "updateGraphics(), repaint() failed");
}
}
-
+ // update screen
refresh(tmpSurf, &srcRect, gGraph->screen, dstRect);
if ( (params->debugFlags & DEBUG_DIRTYRECTANGLES) == DEBUG_DIRTYRECTANGLES ) {