Mercurial > molko
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 |
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 */ |