/* spacemaze - Fly a space ship through a maze and collect all the items. Copyright (C) 2000, 2001, 2002 John Ericson This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 2000-03-25 High / John Ericson john.ericson@home.se */ #include "gfx.h" void initdrawrect(const int size) { int i; /* Set up the update rectangle pointers */ for (i = 0; i < size; ++i) { drawrect[i].rectsrc = &drawrectsrc[i]; drawrect[i].rectdst = &drawrectdst[i]; } } /* Completely erase the 'drawrect' vector on it's content */ void cleardrawrect(void) { /* int i; for (i = 0;i <= MAXDRAWRECT;i++) drawrect[i].used = false; */ drawrect_numupdate = 0; } /* Redraws all rectangles in the 'drawrect' vector */ void updatescreen(void) { int i; //printf("drawrect_numupdate: %d\n", drawrect_numupdate); for (i = 0; i < drawrect_numupdate; i++) { //printf("%d (%d) dst: x: %d y: %d w: %d h: %d src: x: %d y: %d w: %d h: %d\n", i, drawrect_numupdate, drawrect[i].rectdst->x, drawrect[i].rectdst->y, drawrect[i].rectdst->w, drawrect[i].rectdst->h, drawrect[i].rectsrc->x, drawrect[i].rectsrc->y, drawrect[i].rectsrc->w, drawrect[i].rectsrc->h); if (drawrect[i].src != NULL) SDL_LowerBlit(drawrect[i].src, drawrect[i].rectsrc, screen, drawrect[i].rectdst); } SDL_UpdateRects(screen, drawrect_numupdate, drawrectdst); cleardrawrect(); } /* Add an rectangle that should be redrawed when function 'updatescreen' is called. */ void inputdrawrectsrc(SDL_Rect *rect, SDL_Surface *src) { struct struct_drawrect *u; u = &drawrect[drawrect_numupdate++]; u->src = src; u->rectsrc->x = 0; u->rectsrc->y = 0; u->rectsrc->w = rect->w; u->rectsrc->h = rect->h; u->rectdst->x = rect->x; u->rectdst->y = rect->y; u->rectdst->w = rect->w; u->rectdst->h = rect->h; } void inputdrawrect(SDL_Rect *rect) { struct struct_drawrect *u; u = &drawrect[drawrect_numupdate++]; u->src = NULL; u->rectsrc->x = 0; u->rectsrc->y = 0; u->rectsrc->w = rect->w; u->rectsrc->h = rect->h; u->rectdst->x = rect->x; u->rectdst->y = rect->y; u->rectdst->w = rect->w; u->rectdst->h = rect->h; } /* Putpixel function for 8bpp mode with out-of-screen clipping */ void putpixel(Uint16 x, Uint16 y, Uint32 pixel) { if (x <= screen->w && y <= screen->h) *((Uint8 *)screen->pixels + y * screen->pitch + x) = pixel; }