annotate libcore/core/action.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 8b035f7f978a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * action.h -- action states
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
19 #ifndef MOLKO_ACTION_H
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
20 #define MOLKO_ACTION_H
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 /**
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * \file action.h
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \brief Action states.
70
53b217afe122 doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents: 69
diff changeset
25 * \ingroup actions
53b217afe122 doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents: 69
diff changeset
26 */
53b217afe122 doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents: 69
diff changeset
27
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <stdbool.h>
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 /**
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
31 * \brief Maximum number of actions in stack.
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 */
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
33 #define ACTION_STACK_MAX 128
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
34
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
35 union event;
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 /**
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 * \brief Action structure.
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
39 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
40 * Use this structure to create an action that reacts to user events.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
41 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
42 * The purpose of actions is to simplify user interaction within a specific
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
43 * state or a dedicated user routine. With the help of the companion
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
44 * \ref action_stack it is easy to manage actions in a specific game logic
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
45 * state.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
46 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
47 * All members can be NULL.
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 */
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 struct action {
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 /**
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
51 * (RW, optional)
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 *
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 * Arbitrary user data.
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 */
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 void *data;
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 /**
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
58 * (RW, optional)
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 *
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 * Handle event.
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
61 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
62 * \param act this action
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
63 * \param ev the event
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 */
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
65 void (*handle)(struct action *act, const union event *ev);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
66
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
67 /**
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
68 * (RW, optional)
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
69 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
70 * Update the action.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
71 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
72 * \param act this action
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
73 * \param ticks the number of milliseconds since last frame
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
74 * \return true if action has terminated
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
75 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
76 bool (*update)(struct action *act, unsigned int ticks);
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
77
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 /**
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 * (RW)
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 *
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
81 * Draw the action.
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 *
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
83 * \param act this action
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 */
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
85 void (*draw)(struct action *act);
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
86
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 /**
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 * (RW)
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 *
69
5da49274e5fb core: add new action.end callback for user
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
90 * Called when the action was completed.
5da49274e5fb core: add new action.end callback for user
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
91 *
5da49274e5fb core: add new action.end callback for user
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
92 * This callback is mostly provided to allow the user doing something
5da49274e5fb core: add new action.end callback for user
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
93 * else once an action is complete. Predefined actions should not use
5da49274e5fb core: add new action.end callback for user
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
94 * this callback by themselves.
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
95 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
96 * \param act this action
69
5da49274e5fb core: add new action.end callback for user
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
97 */
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
98 void (*end)(struct action *act);
69
5da49274e5fb core: add new action.end callback for user
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
99
5da49274e5fb core: add new action.end callback for user
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
100 /**
5da49274e5fb core: add new action.end callback for user
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
101 * (RW)
5da49274e5fb core: add new action.end callback for user
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
102 *
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
103 * Close the action before removal. This function should be used to
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
104 * deallocate memory if necessary.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
105 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
106 * \param act this action
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 */
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
108 void (*finish)(struct action *act);
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 };
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
110
136
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
111 /**
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
112 * Shortcut for act->handle (if not NULL).
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
113 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
114 * \pre act != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
115 * \pre ev != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
116 * \param act the action
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
117 * \param ev the event
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
118 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
119 void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
120 action_handle(struct action *act, const union event *ev);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
121
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
122 /**
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
123 * Shortcut for act->update (if not NULL).
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
124 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
125 * \pre act != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
126 * \param act the action
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
127 * \param ticks the number of milliseconds since last frame
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
128 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
129 bool
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
130 action_update(struct action *act, unsigned int ticks);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
131
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
132 /**
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
133 * Shortcut for act->draw (if not NULL).
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
134 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
135 * \pre act != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
136 * \param act the action
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
137 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
138 void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
139 action_draw(struct action *act);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
140
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
141 /**
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
142 * Shortcut for act->end (if not NULL).
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
143 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
144 * \pre act != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
145 * \param act the action
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
146 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
147 void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
148 action_end(struct action *act);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
149
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
150 /**
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
151 * Shortcut for act->finish (if not NULL).
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
152 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
153 * \pre act != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
154 * \param act the action
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
155 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
156 void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
157 action_finish(struct action *act);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
158
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
159 /**
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
160 * \brief Stack of actions.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
161 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
162 * The purpose of this structure is to help managing several actions at once.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
163 * Actions are automatically removed from the stack if the corresponding update
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
164 * member function returns true after completion.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
165 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
166 * This structure contains pointers to actions that must be kept until the stack
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
167 * is destroyed. User is responsible of deallocating them if they were allocated
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
168 * from the heap.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
169 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
170 struct action_stack {
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
171 struct action *actions[ACTION_STACK_MAX]; /*!< (RW) Actions */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
172 };
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
173
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
174 /**
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
175 * Initalize the action stack.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
176 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
177 * It is unnecessary if the object was zero'ed.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
178 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
179 * \pre st != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
180 * \param st the stack
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
181 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
182 void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
183 action_stack_init(struct action_stack *st);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
184
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
185 /**
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
186 * Add an action to the stack.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
187 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
188 * \pre st != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
189 * \pre act != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
190 * \param st the stack
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
191 * \param act the action
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
192 * \note The pointer must be kept alive.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
193 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
194 bool
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
195 action_stack_add(struct action_stack *st, struct action *act);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
196
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
197 /**
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
198 * Handle an event for all actions.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
199 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
200 * \pre st != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
201 * \pre ev != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
202 * \param st the stack
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
203 * \param ev the event
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
204 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
205 void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
206 action_stack_handle(struct action_stack *st, const union event *ev);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
207
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
208 /**
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
209 * Update all actions.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
210 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
211 * \pre st != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
212 * \param st the stack
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
213 * \param ticks the number of milliseconds since last frame
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
214 * \return true if all actions completed
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
215 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
216 bool
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
217 action_stack_update(struct action_stack *st, unsigned int ticks);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
218
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
219 /**
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
220 * Draw all actions.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
221 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
222 * \pre st != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
223 * \param st the stack
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
224 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
225 void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
226 action_stack_draw(struct action_stack *st);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
227
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
228 /**
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
229 * Terminate all actions and clear the stack.
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
230 *
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
231 * \pre st != NULL
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
232 * \param st the stack
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
233 */
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
234 void
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
235 action_stack_finish(struct action_stack *st);
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
236
30b68089ae70 core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
237 #endif /* !MOLKO_ACTION_H */