diff options
| author | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-02-01 22:59:06 +0000 |
|---|---|---|
| committer | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-02-01 22:59:06 +0000 |
| commit | 6d4e1eae16b84918009625a866104ec26a234277 (patch) | |
| tree | a340a8a547a60c9f63c8dfafe8909242f9c9bbd8 /src/layer.c | |
nahranie tarballu tuxanci-ng na SVN server
Dusan Durech ( Oroborus )
git-svn-id: http://opensvn.csie.org/tuxanci_ng@1 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
Diffstat (limited to 'src/layer.c')
| -rwxr-xr-x | src/layer.c | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/src/layer.c b/src/layer.c new file mode 100755 index 0000000..0ea2bfe --- /dev/null +++ b/src/layer.c @@ -0,0 +1,115 @@ + +#include <stdlib.h> +#include <assert.h> + +#include "main.h" +#include "interface.h" +#include "list.h" +#include "layer.h" +#include "image.h" + +static list_t *listLayer; + +static bool_t isLayerInit = FALSE; + +bool_t isLayerInicialized() +{ + return isLayerInit; +} + +/* + * Inicializuje globalny zoznam vsrtiev + */ +void initLayer() +{ + listLayer = newList(); +} + +/* + * Prida novu polozku do zoznamu vrstiev + * *img - obrazok, ktory obsahuje polozka + * x y w h - suradnca kam sa obrazok vykresli a jeho rozmery + * px py pw ph - suradnica casti obrazka *img ktora sa ma zobrazit + * layer - vrstva na ktorej sa zobrazi obrazok + */ +void addLayer(SDL_Surface *img, + int x,int y, int px,int py, + int w,int h, int player) +{ + layer_t *new; + layer_t *this; + int i; + + assert( img != NULL ); + + new = malloc( sizeof(layer_t) ); + new->x = x; + new->y = y; + new->w = w; + new->h = h; + new->px = px; + new->py = py; + new->layer = player; + new->image = img; + + if( listLayer->count == 0 ) + { + addList(listLayer, new); + return; + } + + i = 0; + this = (layer_t *)listLayer->list[0]; + + //vyhladaj svoju vrstvu + while( i < listLayer->count && this->layer < new->layer ) + { + this = (layer_t *)listLayer->list[++i]; + } + + //porovnaj s vyskami na tvojej vrstve, + //ak neexistuje, rovno to tam hod + this = (layer_t *)listLayer->list[i]; + + while( i < listLayer->count && this->y+this->h < new->y+new->h && new->layer == this->layer ) + { + this = (layer_t *)listLayer->list[++i]; + } + + insList(listLayer, i, new); + isLayerInit = TRUE; +} + +/* + * Vykresli vsetky polozky na obrazovku + * poukadane podla vrstvy a suradnice Y+H + * po dokresleni sa zoznam uvolni. + */ +void drawLayer() +{ + layer_t *this; + int i; + + for( i = 0 ; i < listLayer->count ; i++ ) + { + this = (layer_t *)listLayer->list[i]; + + drawImage(this->image, + this->x, this->y, + this->px, this->py, + this->w, this->h); + } + + destroyListItem(listLayer, free); + listLayer = newList(); +} + +/* + * Odstrani zoznam vrtsiev z pamete. + */ +void quitLayer() +{ + destroyListItem(listLayer, free); + isLayerInit = FALSE; +} + |