annotate libmlk-rpg/rpg/tileset.h @ 243:71b3b7036de7

misc: lot of cleanups, - prefix libraries with libmlk, - move assets from source directories closes #2520, - prefix header guards closes #2519
author David Demelier <markand@malikania.fr>
date Sat, 28 Nov 2020 22:37:30 +0100
parents librpg/rpg/tileset.h@e71039d820a7
children 08ab73b32832
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * tileset.h -- map tileset definition
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef MOLKO_RPG_TILESET_H
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define MOLKO_RPG_TILESET_H
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <stdbool.h>
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <stddef.h>
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 struct sprite;
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 /**
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 * \brief Describe a tile property in a tileset.
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 *
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 * It can contains an animation and a collision mask.
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 */
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 struct tileset_tiledef {
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
33 unsigned short id; /*!< (+) Tile index. */
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 short x; /*!< (+) Collision region starts in y. */
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 short y; /*!< (+) Collision region starts in y. */
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 unsigned short w; /*!< (+) Collision width. */
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 unsigned short h; /*!< (+) Collision height. */
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 };
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39
229
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
40 /**
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
41 * \brief Per tile animation.
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
42 *
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
43 * This structure is used to animate tiles by id. Create one for every tile
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
44 * that must be animated.
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
45 */
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
46 struct tileset_animation {
229
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
47 unsigned short id; /*!< (*) Tile index. */
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
48 struct animation *animation; /*!< (+&?) Animation. */
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
49 };
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
50
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 /**
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 * \brief Tileset definition.
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 */
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 struct tileset {
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 struct tileset_tiledef *tiledefs; /*!< (+&?) Per tile properties (must be sorted by id). */
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 size_t tiledefsz; /*!< (+) Number of tile properties. */
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
57 struct tileset_animation *anims; /*!< (+&?) Per tile animations (must be sorted by id). */
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
58 size_t animsz; /*!< (+) Number of tile animations. */
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 struct sprite *sprite; /*!< (+&) Sprite to generate the terrain. */
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 };
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
229
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
62 /**
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
63 * Tells if the tileset is correctly initialized.
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
64 *
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
65 * \param ts the tileset to check (maybe NULL)
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
66 * \return True if correctly initialized.
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
67 */
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 bool
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 tileset_ok(const struct tileset *ts);
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
70
229
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
71 /**
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
72 * Prepare the tileset before use.
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
73 *
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
74 * You must call this function once before using it in the rendering of the map
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
75 * because it will prepare animations.
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
76 *
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
77 * \pre ts != NULL
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
78 * \param ts the tileset to prepare
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
79 */
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 void
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
81 tileset_start(struct tileset *ts);
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
82
229
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
83 /**
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
84 * Update tileset.
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
85 *
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
86 * This function will update tileset animations. It is not necessary to call it
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
87 * if the tileset does not contain any animation.
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
88 *
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
89 * \pre ts != NULL
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
90 * \param ts the tileset to update
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
91 * \param ticks the elapsed milliseconds since last frame
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
92 */
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
93 void
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
94 tileset_update(struct tileset *ts, unsigned int ticks);
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
95
229
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
96 /**
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
97 * Draw a tileset cell at the given position.
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
98 *
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
99 * If the tileset at the given row, column is animated its animation will be
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
100 * rendered otherwise it uses the sprite row column.
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
101 *
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
102 * The argument r and c must not be out of bounds.
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
103 *
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
104 * \pre ts != NULL
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
105 * \param ts the tileset to use
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
106 * \param r the row number
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
107 * \param c the column number
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
108 * \param x the x coordinate
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
109 * \param y the y coordinate
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 218
diff changeset
110 */
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
111 void
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 tileset_draw(const struct tileset *ts, unsigned int r, unsigned int c, int x, int y);
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
113
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 #endif /* !MOLKO_RPG_TILESET_H */