summaryrefslogtreecommitdiffstats
path: root/src/resources/map.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/resources/map.c')
-rw-r--r--src/resources/map.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/resources/map.c b/src/resources/map.c
index c1a33bf..4b2b9ac 100644
--- a/src/resources/map.c
+++ b/src/resources/map.c
@@ -160,6 +160,8 @@ map_get_layer(struct map *m, const char *name)
void
map_add_exit(struct map *m, struct map_exit *e)
{
+ int i, j;
+
e->next = NULL;
if (m->map_exits_head == NULL) {
m->map_exits_head = e;
@@ -167,6 +169,13 @@ map_add_exit(struct map *m, struct map_exit *e)
m->map_exits_tail->next = e;
}
m->map_exits_tail = e;
+
+ for (i = 0; i < e->width; ++i) {
+ for (j = 0; j < e->height; ++j) {
+ m->collisions[j * m->width + i].type = COLLISION_EXIT;
+ m->collisions[j * m->width + i].data.e = e;
+ }
+ }
}
static struct tileset *
@@ -254,6 +263,13 @@ tmx_map_start(void *pv, const char *name, const char **attr)
xml_get_int_attr(p, attr, "height", &m->height, 1);
xml_get_int_attr(p, attr, "tilewidth", &m->tilewidth, 1);
xml_get_int_attr(p, attr, "tileheight", &m->tileheight, 1);
+ m->collisions = malloc(m->width * m->height *
+ sizeof(*m->collisions));
+ if (m->collisions == NULL) {
+ return;
+ }
+ memset(m->collisions, 0, m->width * m->height *
+ sizeof(*m->collisions));
xml_node_push(p, m, tmx_map_el_start, tmx_map_end, NULL);
} else {
xml_unexpected_start_tag(p, name, "map");