Mercurial > molko
annotate libmlk-core/mlk/core/animation.h @ 559:ba0cca39e4ca
util: fmemopen leftover
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 08 Mar 2023 20:01:00 +0100 |
parents | 6e8f6640e05b |
children | 459ff09c09b3 |
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. |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
30 */ |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
31 |
468
91ce23a36143
core: sprite -> mlk_sprite
David Demelier <markand@malikania.fr>
parents:
462
diff
changeset
|
32 struct mlk_sprite; |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 |
511
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
34 /** |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
35 * \struct mlk_animation |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
36 * \brief Animation structure |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
37 */ |
448
0c4cd552879d
core: animation -> mlk_animation
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
38 struct mlk_animation { |
511
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
39 /** |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
40 * (read-write, borrowed) |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
41 * |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
42 * The sprite to draw. |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
43 */ |
468
91ce23a36143
core: sprite -> mlk_sprite
David Demelier <markand@malikania.fr>
parents:
462
diff
changeset
|
44 const struct mlk_sprite *sprite; |
511
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
45 |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
46 /** |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
47 * (read-write) |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
48 * |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
49 * Delay in milliseconds between each frame. |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
50 */ |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
51 unsigned int delay; |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
52 |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
53 /** \cond MLK_PRIVATE_DECLS */ |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
54 unsigned int elapsed; |
253
c4da052c0def
core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
55 unsigned int row; |
c4da052c0def
core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
56 unsigned int column; |
511
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
57 /** \endcond MLK_PRIVATE_DECLS */ |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 }; |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 |
517
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
515
diff
changeset
|
60 #if defined(__cplusplus) |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
515
diff
changeset
|
61 extern "C" { |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
515
diff
changeset
|
62 #endif |
292
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
253
diff
changeset
|
63 |
511
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
64 /** |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
65 * Start or reset the animation to the beginning. |
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 * \pre animation != NULL |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
68 * \param animation the animation |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
69 */ |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 void |
511
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
71 mlk_animation_start(struct mlk_animation *animation); |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 |
511
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
73 /** |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
74 * Tells if the animation is complete. |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
75 * |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
76 * \pre animation != NULL |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
77 * \param animation the animation |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
78 * \return non-zero if completed |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
79 */ |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
80 int |
511
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
81 mlk_animation_completed(const struct mlk_animation *animation); |
183
604fad63bd9c
core: fix animation delay
David Demelier <markand@malikania.fr>
parents:
169
diff
changeset
|
82 |
511
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
83 /** |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
84 * Update the animation. |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
85 * |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
86 * This function MUST not be called if the animation is complete. |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
87 * |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
88 * \pre animation != NULL and animation is not complete |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
89 * \param animation the animation |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
90 * \param ticks frame ticks |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
91 * \return non-zero if completed |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
92 */ |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
93 int |
511
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
94 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
|
95 |
511
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
96 /** |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
97 * Draw the animation at the given position |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
98 * |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
99 * This function MUST not be called if the animation is complete. |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
100 * |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
101 * \pre animation != NULL and animation is not complete |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
102 * \param animation the animation |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
103 * \param x the x coordinate |
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
104 * \param y the y coordinate |
515
2e05c1804b25
core: doxygenize sprite
David Demelier <markand@malikania.fr>
parents:
511
diff
changeset
|
105 * \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
|
106 */ |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
292
diff
changeset
|
107 int |
511
a1b118127f47
core: doxygenize animation
David Demelier <markand@malikania.fr>
parents:
483
diff
changeset
|
108 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
|
109 |
517
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
515
diff
changeset
|
110 #if defined(__cplusplus) |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
515
diff
changeset
|
111 } |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
515
diff
changeset
|
112 #endif |
292
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
253
diff
changeset
|
113 |
366
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
114 #endif /* !MLK_CORE_ANIMATION_H */ |