annotate src/map.h @ 42:22a09a5ee476

core: add better map check and unit tests
author David Demelier <markand@malikania.fr>
date Wed, 15 Jan 2020 20:33:21 +0100
parents 3996f873a54b
children b815621df3e3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * map.h -- game map
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef MOLKO_MAP_H
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define MOLKO_MAP_H
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 /**
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * \file map.h
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \brief Game map.
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 */
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <stdbool.h>
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <stdint.h>
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include "sprite.h"
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
33
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
32 /**
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
33 * \brief Max title length for a map.
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
34 */
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 #define MAP_TITLE_MAX 32
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 struct texture;
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
33
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
39 /**
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
40 * \brief Map layer.
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
41 */
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 struct map_layer {
33
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
43 uint16_t *tiles; /*!< Array of tiles, depending on the map size. */
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 };
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
33
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
46 /**
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
47 * \brief Map object.
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
48 */
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 struct map {
33
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
50 char title[MAP_TITLE_MAX]; /*!< (RW) The map title */
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
51 struct texture *tileset; /*!< (RW) Tileset to use */
41
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
52 struct texture *picture; /*!< (RO) Map drawn into a picture */
33
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
53 struct sprite sprite; /*!< (RO) Sprite to render */
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
54 uint16_t width; /*!< (RO) Map width in cells */
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
55 uint16_t height; /*!< (RO) Map height in cells */
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
56 uint8_t tilewidth; /*!< (RO) Pixels per cell (width) */
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
57 uint8_t tileheight; /*!< (RO) Pixels per cell (height) */
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
58 struct map_layer layers[2]; /*!< (RO) Layers (background, foreground) */
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 };
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60
33
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
61 /**
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
62 * Open a map.
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
63 *
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
64 * \pre map != NULL
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
65 * \pre path != NULL
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
66 * \param map the map to fill
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
67 * \param path the path to the map
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
68 * \return true if successfully loaded
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
69 */
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 bool
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 map_open(struct map *map, const char *path);
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
72
33
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
73 /**
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
74 * Render a map.
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
75 *
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
76 * \pre map != NULL
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
77 * \param map the map to render
42
22a09a5ee476 core: add better map check and unit tests
David Demelier <markand@malikania.fr>
parents: 41
diff changeset
78 * \param srcx the x coordinate region
22a09a5ee476 core: add better map check and unit tests
David Demelier <markand@malikania.fr>
parents: 41
diff changeset
79 * \param srcy the y coordinate region
33
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
80 */
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 void
42
22a09a5ee476 core: add better map check and unit tests
David Demelier <markand@malikania.fr>
parents: 41
diff changeset
82 map_draw(struct map *map, int srcx, int srcy);
28
783841af4033 core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
83
33
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
84 /**
41
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
85 * Force map repaint on its texture.
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
86 *
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
87 * \pre map != NULL
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
88 * \param map the map to repaint
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
89 * \warning This function does not render anything on the screen
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
90 */
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
91 void
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
92 map_repaint(struct map *map);
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
93
3996f873a54b core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
94 /**
33
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
95 * Close the map and its resources.
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
96 *
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
97 * \pre map != NULL
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
98 * \param map the map to render
7035c1eb44fb core: document map.h
David Demelier <markand@malikania.fr>
parents: 28
diff changeset
99 */
28
783841af4033 core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
100 void
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 map_close(struct map *map);
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
102
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 #endif /* !MOLKO_MAP_H */