diff options
-rw-r--r-- | src/resources/map.c | 16 | ||||
-rw-r--r-- | src/resources/map.h | 15 |
2 files changed, 30 insertions, 1 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"); diff --git a/src/resources/map.h b/src/resources/map.h index bf225de..e088161 100644 --- a/src/resources/map.h +++ b/src/resources/map.h @@ -35,6 +35,19 @@ struct layer { char *compression; char *raw_data; }; +struct map_collision { + enum { + COLLISION_NONE = 0, + COLLISION_CHAR, + COLLISION_OBJ, + COLLISION_EXIT + } type; + union { +/* struct character *c;*/ + Uint8 o; + struct map_exit *e; + } data; +}; struct map_exit { struct map *map; int x; @@ -69,7 +82,7 @@ struct map { struct map_tileset *tilesets_head; struct map_tileset *tilesets_tail; struct layer layers[LAYERS_MAX]; - Uint8 *collision; + struct map_collision *collisions; struct map_exit *map_exits_head; struct map_exit *map_exits_tail; int cur_ts_firstgid; |