Skip to content

Commit

Permalink
Add support for tileset objectalignment
Browse files Browse the repository at this point in the history
  • Loading branch information
baylej committed Jan 17, 2021
1 parent 52ebed9 commit d3509b6
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 0 deletions.
31 changes: 31 additions & 0 deletions doc/src/datastructure.rst
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,33 @@ Enumerations
| SA_Y | y axis. |
+--------------+--------------------------------------------+

.. c:type:: enum tmx_obj_alignment
Controls the alignment of tiles.
When unspecified, tile objects use OA_BOTTOMLEFT in orthogonal mode and OA_BOTTOM in isometric mode (see :c:type:`tmx_map_orient`).

+----------------+----------------------------------+
| Object align | Description |
+================+==================================+
| OA_NONE | Object alignment is unspecified. |
+----------------+----------------------------------+
| OA_TOP | Top. |
+----------------+----------------------------------+
| OA_LEFT | Left. |
+----------------+----------------------------------+
| OA_BOTTOM | Bottom. |
+----------------+----------------------------------+
| OA_RIGHT | Right. |
+----------------+----------------------------------+
| OA_TOPLEFT | Top-Left. |
+----------------+----------------------------------+
| OA_TOPRIGHT | Top-Right. |
+----------------+----------------------------------+
| OA_BOTTOMLEFT | Bottom-Left. |
+----------------+----------------------------------+
| OA_BOTTOMRIGHT | Bottom-Right. |
+----------------+----------------------------------+

.. c:type:: enum tmx_layer_type
Type of :term:`layer`.
Expand Down Expand Up @@ -459,6 +486,10 @@ you can access everything.
Vertical offset in pixels, a positive value shifts the drawing of tiles down.

.. c:member:: enum tmx_obj_alignment
Controls the alignment of tiles, see :c:type:`tmx_obj_alignment`.

.. c:member:: unsigned int tilecount
The number of tiles in this tileset, length of the :c:member:`tmx_tileset.tiles` array.
Expand Down
2 changes: 2 additions & 0 deletions src/tmx.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ enum tmx_map_orient {O_NONE, O_ORT, O_ISO, O_STA, O_HEX};
enum tmx_map_renderorder {R_NONE, R_RIGHTDOWN, R_RIGHTUP, R_LEFTDOWN, R_LEFTUP};
enum tmx_stagger_index {SI_NONE, SI_EVEN, SI_ODD};
enum tmx_stagger_axis {SA_NONE, SA_X, SA_Y};
enum tmx_obj_alignment {OA_NONE, OA_TOP, OA_LEFT, OA_BOTTOM, OA_RIGHT, OA_CENTER, OA_TOPLEFT, OA_TOPRIGHT, OA_BOTTOMLEFT, OA_BOTTOMRIGHT};
enum tmx_layer_type {L_NONE, L_LAYER, L_OBJGR, L_IMAGE, L_GROUP};
enum tmx_objgr_draworder {G_NONE, G_INDEX, G_TOPDOWN};
enum tmx_obj_type {OT_NONE, OT_SQUARE, OT_POLYGON, OT_POLYLINE, OT_ELLIPSE, OT_TILE, OT_TEXT, OT_POINT};
Expand Down Expand Up @@ -130,6 +131,7 @@ struct _tmx_ts { /* <tileset> and <tileoffset> */
unsigned int tile_width, tile_height;
unsigned int spacing, margin;
int x_offset, y_offset; /* tileoffset */
enum tmx_obj_alignment objectalignment;

unsigned int tilecount;
tmx_image *image;
Expand Down
32 changes: 32 additions & 0 deletions src/tmx_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,38 @@ enum tmx_map_renderorder parse_renderorder(const char *renderorder) {
return R_NONE;
}

/* "topleft" -> OA_TOPLEFT */
enum tmx_obj_alignment parse_obj_alignment(const char *objalign_str) {
if (!strcmp("top", objalign_str)) {
return OA_TOP;
}
if (!strcmp("left", objalign_str)) {
return OA_LEFT;
}
if (!strcmp("bottom", objalign_str)) {
return OA_BOTTOM;
}
if (!strcmp("right", objalign_str)) {
return OA_RIGHT;
}
if (!strcmp("center", objalign_str)) {
return OA_CENTER;
}
if (!strcmp("topleft", objalign_str)) {
return OA_TOPLEFT;
}
if (!strcmp("topright", objalign_str)) {
return OA_TOPRIGHT;
}
if (!strcmp("bottomleft", objalign_str)) {
return OA_BOTTOMLEFT;
}
if (!strcmp("bottomright", objalign_str)) {
return OA_BOTTOMRIGHT;
}
return OA_NONE;
}

/* "index" -> G_INDEX */
enum tmx_objgr_draworder parse_objgr_draworder(const char *draworder) {
if (draworder == NULL || !strcmp(draworder, "topdown")) {
Expand Down
1 change: 1 addition & 0 deletions src/tmx_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ int mk_map_tile_array(tmx_map *map);

enum tmx_map_orient parse_orient(const char *orient_str);
enum tmx_map_renderorder parse_renderorder(const char *renderorder);
enum tmx_obj_alignment parse_obj_alignment(const char *objalign_str);
enum tmx_objgr_draworder parse_objgr_draworder(const char *draworder);
enum tmx_stagger_index parse_stagger_index(const char *staggerindex);
enum tmx_stagger_axis parse_stagger_axis(const char *staggeraxis);
Expand Down
5 changes: 5 additions & 0 deletions src/tmx_xml.c
Original file line number Diff line number Diff line change
Expand Up @@ -809,6 +809,11 @@ static int parse_tileset(xmlTextReaderPtr reader, tmx_tileset *ts_addr, tmx_reso
tmx_free_func(value);
}

if ((value = (char*)xmlTextReaderGetAttribute(reader, (xmlChar*)"objectalignment"))) { /* objectalignment */
ts_addr->objectalignment = parse_obj_alignment(value);
tmx_free_func(value);
}

if (!(ts_addr->tiles = alloc_tiles(ts_addr->tilecount))) return 0;

/* Parse each child */
Expand Down

0 comments on commit d3509b6

Please sign in to comment.