annotate libmlk-core/mlk/core/animation.h @ 646:7e1eb7f6c049 default tip @

misc: remove .clang
author David Demelier <markand@malikania.fr>
date Sun, 04 Feb 2024 15:24:37 +0100
parents 459ff09c09b3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * animation.h -- basic animations
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
445
773a082f0b91 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr>
7
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
366
19782ea1cf4a misc: start rebranding
David Demelier <markand@malikania.fr>
parents: 320
diff changeset
19 #ifndef MLK_CORE_ANIMATION_H
19782ea1cf4a misc: start rebranding
David Demelier <markand@malikania.fr>
parents: 320
diff changeset
20 #define MLK_CORE_ANIMATION_H
7
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
22 /**
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
23 * \file mlk/core/animation.h
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
24 * \brief Basic animations
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
25 *
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
26 * Drawable animations.
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
27 *
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
28 * Animations are small objects using a ::mlk_sprite to update themselves and
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
29 * draw next frames depending on delay set.
580
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
30 *
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
31 * Using the ::MLK_ANIMATION_FLAGS_LOOP, animations can be permanent and they
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
32 * reset automatically on update.
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
33 */
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
34
468
91ce23a36143 core: sprite -> mlk_sprite
David Demelier <markand@malikania.fr>
parents: 462
diff changeset
35 struct mlk_sprite;
7
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
37 /**
580
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
38 * \enum mlk_animation_flags
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
39 * \brief Animation flags.
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
40 *
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
41 * This enumeration is implemented as a bitmask.
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
42 */
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
43 enum mlk_animation_flags {
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
44 /**
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
45 * No flags, default.
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
46 */
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
47 MLK_ANIMATION_FLAGS_NONE,
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
48
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
49 /**
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
50 * Animation never ends.
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
51 */
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
52 MLK_ANIMATION_FLAGS_LOOP = (1 << 0)
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
53 };
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
54
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
55 /**
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
56 * \struct mlk_animation
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
57 * \brief Animation structure
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
58 */
448
0c4cd552879d core: animation -> mlk_animation
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
59 struct mlk_animation {
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
60 /**
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
61 * (read-write, borrowed)
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
62 *
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
63 * The sprite to draw.
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
64 */
468
91ce23a36143 core: sprite -> mlk_sprite
David Demelier <markand@malikania.fr>
parents: 462
diff changeset
65 const struct mlk_sprite *sprite;
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
66
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
67 /**
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
68 * (read-write)
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
69 *
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
70 * Delay in milliseconds between each frame.
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
71 */
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
72 unsigned int delay;
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
73
580
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
74 /**
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
75 * (read-write)
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
76 *
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
77 * Optional animation flags.
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
78 */
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
79 enum mlk_animation_flags flags;
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
80
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
81 /** \cond MLK_PRIVATE_DECLS */
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
82 unsigned int elapsed;
253
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
83 unsigned int row;
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
84 unsigned int column;
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
85 /** \endcond MLK_PRIVATE_DECLS */
7
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 };
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
87
517
6e8f6640e05b misc: use extern C manually
David Demelier <markand@malikania.fr>
parents: 515
diff changeset
88 #if defined(__cplusplus)
6e8f6640e05b misc: use extern C manually
David Demelier <markand@malikania.fr>
parents: 515
diff changeset
89 extern "C" {
6e8f6640e05b misc: use extern C manually
David Demelier <markand@malikania.fr>
parents: 515
diff changeset
90 #endif
292
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 253
diff changeset
91
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
92 /**
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
93 * Start or reset the animation to the beginning.
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
94 *
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
95 * \pre animation != NULL
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
96 * \param animation the animation
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
97 */
7
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 void
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
99 mlk_animation_start(struct mlk_animation *animation);
7
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
100
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
101 /**
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
102 * Tells if the animation is complete.
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
103 *
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
104 * \pre animation != NULL
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
105 * \param animation the animation
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
106 * \return non-zero if completed
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
107 */
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
108 int
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
109 mlk_animation_completed(const struct mlk_animation *animation);
183
604fad63bd9c core: fix animation delay
David Demelier <markand@malikania.fr>
parents: 169
diff changeset
110
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
111 /**
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
112 * Update the animation.
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
113 *
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
114 * This function MUST not be called if the animation is complete.
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
115 *
580
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
116 * If the animation has ::MLK_ANIMATION_FLAGS_LOOP, this function will always
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
117 * return 0.
459ff09c09b3 core: animation can be looped
David Demelier <markand@malikania.fr>
parents: 517
diff changeset
118 *
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
119 * \pre animation != NULL and animation is not complete
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
120 * \param animation the animation
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
121 * \param ticks frame ticks
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
122 * \return non-zero if completed
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
123 */
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
124 int
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
125 mlk_animation_update(struct mlk_animation *animation, unsigned int ticks);
7
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
126
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
127 /**
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
128 * Draw the animation at the given position
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
129 *
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
130 * This function MUST not be called if the animation is complete.
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
131 *
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
132 * \pre animation != NULL and animation is not complete
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
133 * \param animation the animation
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
134 * \param x the x coordinate
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
135 * \param y the y coordinate
515
2e05c1804b25 core: doxygenize sprite
David Demelier <markand@malikania.fr>
parents: 511
diff changeset
136 * \return 0 on success or any error propagated from ::mlk_sprite_draw.
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
137 */
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
138 int
511
a1b118127f47 core: doxygenize animation
David Demelier <markand@malikania.fr>
parents: 483
diff changeset
139 mlk_animation_draw(const struct mlk_animation *animation, int x, int y);
7
fbb7101b7bd8 core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff changeset
140
517
6e8f6640e05b misc: use extern C manually
David Demelier <markand@malikania.fr>
parents: 515
diff changeset
141 #if defined(__cplusplus)
6e8f6640e05b misc: use extern C manually
David Demelier <markand@malikania.fr>
parents: 515
diff changeset
142 }
6e8f6640e05b misc: use extern C manually
David Demelier <markand@malikania.fr>
parents: 515
diff changeset
143 #endif
292
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 253
diff changeset
144
366
19782ea1cf4a misc: start rebranding
David Demelier <markand@malikania.fr>
parents: 320
diff changeset
145 #endif /* !MLK_CORE_ANIMATION_H */