annotate libmlk-rpg/mlk/rpg/tileset-loader-file.h @ 631:bb67f935a93f

rpg: rework a little tileset/map loaders
author David Demelier <markand@malikania.fr>
date Sun, 27 Aug 2023 11:28:35 +0200
parents fee7bd30725c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
552
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * tileset-loader-file.h -- tileset file loader implementation
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr>
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef MLK_RPG_TILESET_LOADER_FILE_H
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define MLK_RPG_TILESET_LOADER_FILE_H
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 /**
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * \file mlk/rpg/tileset-loader-file.h
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \brief Tileset file loader implementation
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 *
594
e070fdcc592b misc: various cleanups
David Demelier <markand@malikania.fr>
parents: 593
diff changeset
26 * This convenient tileset loader loads a tileset from file and its associative
552
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 * resources relative to the tileset file directory.
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 *
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 * It also allocate memory for individual element and as such must be kept
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 * valid until the tileset is no longer used. If this behavior is not wanted,
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 * the allocator functions can be changed.
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 */
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
33
629
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
34 #include "tileset-loader.h"
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
35
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
36 struct mlk_tileset_collision;
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
37 struct mlk_tileset_animation;
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
38 struct mlk__loader_file;
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
39
631
bb67f935a93f rpg: rework a little tileset/map loaders
David Demelier <markand@malikania.fr>
parents: 629
diff changeset
40 /**
bb67f935a93f rpg: rework a little tileset/map loaders
David Demelier <markand@malikania.fr>
parents: 629
diff changeset
41 * \struct mlk_tileset_loader_file
bb67f935a93f rpg: rework a little tileset/map loaders
David Demelier <markand@malikania.fr>
parents: 629
diff changeset
42 * \brief Tileset loader from file.
bb67f935a93f rpg: rework a little tileset/map loaders
David Demelier <markand@malikania.fr>
parents: 629
diff changeset
43 */
629
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
44 struct mlk_tileset_loader_file {
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
45 /**
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
46 * (read-write)
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
47 *
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
48 * Underlying tileset loader.
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
49 */
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
50 struct mlk_tileset_loader iface;
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
51
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
52 /** \cond MLK_PRIVATE_DECLS */
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
53 struct mlk_tileset_collision *tilecollisions;
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
54 struct mlk_tileset_animation *tileanimations;
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
55 struct mlk__loader_file *lf;
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
56 /** \endcond MLK_PRIVATE_DECLS */
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
57 };
552
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
58
554
cdbc13ceff85 rpg: do the same for map
David Demelier <markand@malikania.fr>
parents: 552
diff changeset
59 #if defined(__cplusplus)
cdbc13ceff85 rpg: do the same for map
David Demelier <markand@malikania.fr>
parents: 552
diff changeset
60 extern "C" {
cdbc13ceff85 rpg: do the same for map
David Demelier <markand@malikania.fr>
parents: 552
diff changeset
61 #endif
cdbc13ceff85 rpg: do the same for map
David Demelier <markand@malikania.fr>
parents: 552
diff changeset
62
552
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 /**
631
bb67f935a93f rpg: rework a little tileset/map loaders
David Demelier <markand@malikania.fr>
parents: 629
diff changeset
64 * Initialize this file loader and the underlying abstract tileset loader
bb67f935a93f rpg: rework a little tileset/map loaders
David Demelier <markand@malikania.fr>
parents: 629
diff changeset
65 * interface.
552
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 *
593
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
67 * After loading the tileset with this underlying loader, it should be kept
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
68 * until the tileset is no longer used.
552
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 *
629
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
70 * \pre file != NULL
552
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 * \pre filename != NULL
631
bb67f935a93f rpg: rework a little tileset/map loaders
David Demelier <markand@malikania.fr>
parents: 629
diff changeset
72 * \param file the file loader
552
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 * \param filename path to the tileset file
593
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
74 * \return 0 on success or -1 on error
552
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 */
593
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents: 554
diff changeset
76 int
629
fee7bd30725c rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents: 594
diff changeset
77 mlk_tileset_loader_file_init(struct mlk_tileset_loader_file *file, const char *filename);
552
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
78
554
cdbc13ceff85 rpg: do the same for map
David Demelier <markand@malikania.fr>
parents: 552
diff changeset
79 #if defined(__cplusplus)
cdbc13ceff85 rpg: do the same for map
David Demelier <markand@malikania.fr>
parents: 552
diff changeset
80 }
cdbc13ceff85 rpg: do the same for map
David Demelier <markand@malikania.fr>
parents: 552
diff changeset
81 #endif
cdbc13ceff85 rpg: do the same for map
David Demelier <markand@malikania.fr>
parents: 552
diff changeset
82
552
ffd972a3d084 rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 #endif /* !MLK_RPG_TILESET_LOADER_FILE_H */