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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
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
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
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
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
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
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
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
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
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
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
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
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
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
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
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
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
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
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
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
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
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 */