summaryrefslogtreecommitdiff
path: root/src/graphic.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphic.c')
-rw-r--r--src/graphic.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/graphic.c b/src/graphic.c
index c12b399..c6acf4f 100644
--- a/src/graphic.c
+++ b/src/graphic.c
@@ -190,3 +190,59 @@ int paintTerrain(gameIni_t *gIni, gameRess_t *gRess, gameGraphics_t *gGraph) {
return 0;
}
+
+int repaint(gameGraphSurfaces_t *srcSurfs, SDL_Rect *srcRect, SDL_Surface *dstSurf, SDL_Rect dstRect) {
+ int objToRepaintCount, i, res;
+ gameGraphObjState_t *objToRepaint;
+ SDL_Surface *tmpSurf;
+
+ tmpSurf=createSurface(srcRect->w, srcRect->h);
+
+ if (tmpSurf==NULL) {
+ logs(LOG_ERROR, "repain(), createSurface() has failed");
+ return 1;
+ }
+ objToRepaintCount=findAndZSortObjects(srcSurfs->objectsStat, srcRect, &objToRepaint);
+
+ for(i=0;i<objToRepaintCount;++i) {
+ if(objToRepaint[i].zOrder>0) break;
+ res=paintObject(objToRepaint+i, srcRect, tmpSurf);
+ if ( res!=0 ) {
+ logs(LOG_DEBUG, "repaint(), paintObject() failed");
+ }
+ }
+
+ res=SDL_BlitSurface(srcSurfs->terrain, srcRect, tmpSurf, NULL);
+ if ( res!=0 ) {
+ logs2(LOG_DEBUG, "repaint(), SDL_BlitSurface()", SDL_GetError());
+ }
+
+ for(;i<objToRepaintCount;++i) {
+ res=paintObject(objToRepaint+i, srcRect, tmpSurf);
+ if ( res!=0 ) {
+ logs(LOG_DEBUG, "repaint(), paintObject() failed");
+ }
+ }
+
+ res=SDL_BlitSurface(tmpSurf, NULL, dstSurf, &dstRect);
+ if ( res!=0 ) {
+ logs2(LOG_DEBUG, "repaint(), SDL_BlitSurface()", SDL_GetError());
+ }
+
+ free(objToRepaint);
+ SDL_FreeSurface(tmpSurf);
+ return res;
+}
+
+int findAndZSortObjects(gameGraphObjState_t *objectsStat, SDL_Rect *offsetRect, gameGraphObjState_t **objectsFound) {
+ //TODO
+ fprintf(stderr, "TODO findAndZSortObjects(%p, %p, %p)\n", (void *)objectsStat,(void *)offsetRect,(void *)objectsFound);
+ *objectsFound=NULL;
+ return 0;
+}
+
+int paintObject(gameGraphObjState_t *obj, SDL_Rect *srcRect, SDL_Surface *dstSurf) {
+ //TODO
+ fprintf(stderr, "TODO paintObject(%p, %p, %p)\n", (void *)obj,(void *)srcRect,(void *)dstSurf);
+ return 0;
+}