1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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;
}
|