Mercurial > molko
annotate libmlk-core/mlk/core/state.h @ 645:83781cc87fca
core: rework game stack state mechanism
The current model was fundamentally broken as the state could continue its
execution when calling mlk_game_pop from itself (e.g. in update).
The current model uses a sjlj mechanism with mlk_game_push/pop being disallowed
in special state function like end, finish, suspend.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 04 Feb 2024 15:24:00 +0100 |
parents | 7fb5a859bcb4 |
children |
rev | line source |
---|---|
44
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
2 * state.h -- abstract game loop state |
44
c97fe725fdeb
core: implement basic states, closes #2457 @1h
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> |
44
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
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_STATE_H |
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
20 #define MLK_CORE_STATE_H |
44
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
22 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
23 * \file mlk/core/state.h |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
24 * \brief Abstract game loop state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
25 */ |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
26 |
450
b26dd49f69ff
core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
27 union mlk_event; |
44
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
29 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
30 * \struct mlk_state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
31 * \brief State structure |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
32 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
33 * This structure contains only virtual functions that the user can fill and |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
34 * will be called by the main loop. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
35 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
36 * All of the functions can be NULL but usually indicate an useless game. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
37 */ |
469
0d6206cee6b9
core: state -> mlk_state
David Demelier <markand@malikania.fr>
parents:
462
diff
changeset
|
38 struct mlk_state { |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
39 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
40 * (read-write, borrowed, optional) |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
41 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
42 * Optional state data. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
43 */ |
162 | 44 void *data; |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
45 |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
46 /** |
645
83781cc87fca
core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents:
539
diff
changeset
|
47 * (read-write, borrowed, optional) |
83781cc87fca
core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents:
539
diff
changeset
|
48 * |
83781cc87fca
core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents:
539
diff
changeset
|
49 * Arbitrary state name for diagnostic purposes. |
83781cc87fca
core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents:
539
diff
changeset
|
50 */ |
83781cc87fca
core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents:
539
diff
changeset
|
51 const char *name; |
83781cc87fca
core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents:
539
diff
changeset
|
52 |
83781cc87fca
core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents:
539
diff
changeset
|
53 /** |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
54 * (read-write, optional) |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
55 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
56 * Invoked when the state starts, which is called only one time. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
57 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
58 * \param self this state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
59 */ |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
60 void (*start)(struct mlk_state *self); |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
61 |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
62 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
63 * (read-write, optional) |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
64 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
65 * Handle an event. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
66 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
67 * \param self this state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
68 * \param event the event |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
69 */ |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
70 void (*handle)(struct mlk_state *self, const union mlk_event *event); |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
71 |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
72 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
73 * (read-write, optional) |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
74 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
75 * Update the state. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
76 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
77 * \param self this state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
78 * \param ticks frame ticks |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
79 */ |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
80 void (*update)(struct mlk_state *self, unsigned int ticks); |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
81 |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
82 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
83 * (read-write, optional) |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
84 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
85 * Draw the state. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
86 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
87 * \param self this state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
88 */ |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
89 void (*draw)(struct mlk_state *self); |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
90 |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
91 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
92 * (read-write, optional) |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
93 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
94 * Suspend this state. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
95 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
96 * This function is called just before switching to a new state. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
97 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
98 * \param self this state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
99 */ |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
100 void (*suspend)(struct mlk_state *self); |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
101 |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
102 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
103 * (read-write, optional) |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
104 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
105 * Resume this state. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
106 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
107 * This function is called after the previous state has been left. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
108 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
109 * \param self this state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
110 */ |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
111 void (*resume)(struct mlk_state *self); |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
112 |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
113 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
114 * (read-write, optional) |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
115 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
116 * Terminate the state. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
117 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
118 * This function is called when the state is terminated. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
119 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
120 * \param self this state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
121 */ |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
122 void (*end)(struct mlk_state *self); |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
123 |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
124 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
125 * (read-write, optional) |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
126 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
127 * Cleanup resources allocated by the state. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
128 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
129 * \param self this state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
130 */ |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
131 void (*finish)(struct mlk_state *self); |
44
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 }; |
c97fe725fdeb
core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 |
517
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
469
diff
changeset
|
134 #if defined(__cplusplus) |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
469
diff
changeset
|
135 extern "C" { |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
469
diff
changeset
|
136 #endif |
292
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
253
diff
changeset
|
137 |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
138 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
139 * Invoke ::mlk_state::start function if not NULL. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
140 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
141 * \pre state != NULL |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
142 * \param state the state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
143 */ |
162 | 144 void |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
145 mlk_state_start(struct mlk_state *state); |
162 | 146 |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
147 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
148 * Invoke ::mlk_state::handle function if not NULL. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
149 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
150 * \pre state != NULL |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
151 * \pre event != NULL |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
152 * \param state the state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
153 * \param event the event |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
154 */ |
162 | 155 void |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
156 mlk_state_handle(struct mlk_state *state, const union mlk_event *event); |
162 | 157 |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
158 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
159 * Invoke ::mlk_state::update function if not NULL. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
160 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
161 * \pre state != NULL |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
162 * \param state the state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
163 * \param ticks frame ticks |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
164 */ |
162 | 165 void |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
166 mlk_state_update(struct mlk_state *state, unsigned int ticks); |
162 | 167 |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
168 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
169 * Invoke ::mlk_state::draw function if not NULL. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
170 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
171 * \pre state != NULL |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
172 * \param state the state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
173 */ |
162 | 174 void |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
175 mlk_state_draw(struct mlk_state *state); |
299
648f5f949afb
core: implement stackable states
David Demelier <markand@malikania.fr>
parents:
298
diff
changeset
|
176 |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
177 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
178 * Invoke ::mlk_state::suspend function if not NULL. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
179 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
180 * \pre state != NULL |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
181 * \param state the state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
182 */ |
299
648f5f949afb
core: implement stackable states
David Demelier <markand@malikania.fr>
parents:
298
diff
changeset
|
183 void |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
184 mlk_state_suspend(struct mlk_state *state); |
299
648f5f949afb
core: implement stackable states
David Demelier <markand@malikania.fr>
parents:
298
diff
changeset
|
185 |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
186 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
187 * Invoke ::mlk_state::resume function if not NULL. |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
188 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
189 * \pre state != NULL |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
190 * \param state the state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
191 */ |
299
648f5f949afb
core: implement stackable states
David Demelier <markand@malikania.fr>
parents:
298
diff
changeset
|
192 void |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
193 mlk_state_resume(struct mlk_state *state); |
162 | 194 |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
195 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
196 * Invoke ::mlk_state::end function if not NULL |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
197 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
198 * \pre state != NULL |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
199 * \param state the state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
200 */ |
162 | 201 void |
539
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
202 mlk_state_end(struct mlk_state *state); |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
203 |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
204 /** |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
205 * Invoke ::mlk_state::finish function if not NULL |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
206 * |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
207 * \pre state != NULL |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
208 * \param state the state |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
209 */ |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
210 void |
7fb5a859bcb4
core: doxygenize state
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
211 mlk_state_finish(struct mlk_state *state); |
162 | 212 |
517
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
469
diff
changeset
|
213 #if defined(__cplusplus) |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
469
diff
changeset
|
214 } |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
469
diff
changeset
|
215 #endif |
292
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
253
diff
changeset
|
216 |
366
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
217 #endif /* !MLK_CORE_STATE_H */ |