Mercurial > molko
annotate libcore/core/wait.h @ 136:30b68089ae70
core: rework actions and a bit of drawables, closes #2492
In the effort of having as less as possible memory allocation in libcore, the
usage of actions and drawable no longer copy the original source parameter to
let user pass a heap allocated variable or a static storage one.
Update predefined drawable and actions to match these new needs.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 13 Oct 2020 09:38:44 +0200 |
parents | 789b23e01f52 |
children | b386d25832c8 |
rev | line source |
---|---|
66
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * wait.h -- wait action |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #ifndef MOLKO_WAIT_H |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #define MOLKO_WAIT_H |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 /** |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 * \file wait.h |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 * \brief Wait action. |
70
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
25 * \ingroup actions |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
26 * |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
27 * This module is meant to create a delayed action. |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
28 * |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
29 * Combined with \ref script.h, you can create a sequence of actions with |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
30 * delays between each. |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
31 * |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
32 * \code |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
33 * struct script script; |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
34 * struct action action; |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
35 * |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
36 * // Prepare the script. |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
37 * script_init(&script); |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
38 * |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
39 * // Add some actions to script using script_append. |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
40 * // ... |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
41 * |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
42 * // Wait one second delay before next action. |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
43 * wait_action(&(struct wait) { .delay = 1000 }, &action); |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
44 * script_append(&script, &action); |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
45 * |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
46 * // Add more actions after this delay. |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
47 * // ... |
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
48 * \endcode |
66
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 */ |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 #include <stdbool.h> |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 struct action; |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 /** |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 * \brief Wait action. |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 */ |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 struct wait { |
70
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
59 unsigned int delay; /*!< (RW) Time to wait in milliseconds */ |
66
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 unsigned int elapsed; /*!< (RO) Elapsed time */ |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 }; |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 /** |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 * Start the wait action. |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 * |
70
53b217afe122
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
66
diff
changeset
|
66 * This function is equivalent to `w->elapsed = 0`; |
66
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 * |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 * \pre w != NULL |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 * \param w the wait object |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 */ |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 void |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 wait_start(struct wait *w); |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 /** |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 * Update the wait object. |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 * |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 * \pre w != NULL |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 * \param w the wait object |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 * \param ticks the number of milliseconds since last frame |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 * \return true if complete |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 */ |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 bool |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 wait_update(struct wait *w, unsigned int ticks); |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 /** |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 * Create an action from the wait object. |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 * |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
88 * The wait action must be kept alive until the action completes. |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
89 * |
66
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 * \pre w != NULL |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
91 * \pre act != NULL |
66
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 * \param w the wait object to copy from |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
93 * \param act the action to fill |
66
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 */ |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 void |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
96 wait_action(struct wait *w, struct action *act); |
66
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 |
9435a53adab4
core: implement wait action, closes #2466
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 #endif /* !MOLKO_WAIT_H */ |