summaryrefslogtreecommitdiff
path: root/src/layer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/layer.c')
-rwxr-xr-xsrc/layer.c115
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;
+}
+