annotate libmlk-core/core/state.h @ 243:71b3b7036de7

misc: lot of cleanups, - prefix libraries with libmlk, - move assets from source directories closes #2520, - prefix header guards closes #2519
author David Demelier <markand@malikania.fr>
date Sat, 28 Nov 2020 22:37:30 +0100
parents libcore/core/state.h@87f8ef73a160
children c4da052c0def
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 /*
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * state.h -- abstract state
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
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
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 164
diff changeset
19 #ifndef MOLKO_CORE_STATE_H
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 164
diff changeset
20 #define MOLKO_CORE_STATE_H
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 /**
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * \file state.h
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \brief Abstract state.
72
6203e1ac9b18 doc: improve doxygen documentation a lot
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
25 * \ingroup states
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
26 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
27 * The state module is a facility that allows changing game context with ease
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
28 * using a single \ref game_switch routine.
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
29 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
30 * The user creates any state required, set appropriate functions if needed and
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
31 * place them in the game using \ref game_switch. Then function \ref game_handle
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
32 * \ref game_update and finally \ref game_draw.
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 */
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 union event;
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 /**
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 * \brief Abstract state.
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 */
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 struct state {
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 /**
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
42 * (+&?) Optional user data.
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 */
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
44 void *data;
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 /**
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
47 * (+?) This function is called when the state is about to begin.
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
48 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
49 * \param state this state
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 */
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
51 void (*start)(struct state *state);
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 /**
147
b386d25832c8 doc: use new nomenclature, closes #2497
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
54 * (+) This function is called for each event that happened.
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
55 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
56 * \param state this state
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
57 * \param ev the event
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 */
164
87f8ef73a160 doc: some fixes
David Demelier <markand@malikania.fr>
parents: 162
diff changeset
59 void (*handle)(struct state *state, const union event *ev);
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 /**
147
b386d25832c8 doc: use new nomenclature, closes #2497
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
62 * (+) Update the state.
b386d25832c8 doc: use new nomenclature, closes #2497
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
63 *
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 * This function is called to update the game, with the number of
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 * milliseconds since the last frame.
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
66 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
67 * \param state this state
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
68 * \param ev the event
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 */
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
70 void (*update)(struct state *state, unsigned int ticks);
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 /**
147
b386d25832c8 doc: use new nomenclature, closes #2497
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
73 * (+) This function is supposed to draw the game.
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
74 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
75 * \param state this state
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 */
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
77 void (*draw)(struct state *state);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
78
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
79 /**
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
80 * (+?) This function is called when the state is about to be switched
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
81 * away from.
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
82 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
83 * This function is not called in case `quick` is set to true when
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
84 * calling \ref game_switch function.
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
85 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
86 * \param state this state
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
87 */
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
88 void (*end)(struct state *state);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
89
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
90 /**
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
91 * (+?) This function is called to close resources if necessary.
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
92 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
93 * \param state the state
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
94 */
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
95 void (*finish)(struct state *state);
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 };
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
97
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
98 /**
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
99 * Shortcut for state->start (if not NULL)
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
100 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
101 * \pre state != NULL
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
102 * \param state the state
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
103 */
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
104 void
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
105 state_start(struct state *state);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
106
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
107 /**
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
108 * Shortcut for state->handle (if not NULL)
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
109 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
110 * \pre state != NULL
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
111 * \pre ev != NULL
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
112 * \param state the state
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
113 * \param ev the event
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
114 */
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
115 void
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
116 state_handle(struct state *state, const union event *ev);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
117
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
118 /**
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
119 * Shortcut for state->update (if not NULL)
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
120 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
121 * \pre state != NULL
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
122 * \param state the state
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
123 * \param ticks elapsed milliseconds since last frame
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
124 */
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
125 void
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
126 state_update(struct state *state, unsigned int ticks);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
127
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
128 /**
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
129 * Shortcut for state->draw (if not NULL)
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
130 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
131 * \pre state != NULL
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
132 * \param state the state
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
133 */
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
134 void
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
135 state_draw(struct state *state);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
136
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
137 /**
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
138 * Shortcut for state->end (if not NULL)
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
139 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
140 * \pre state != NULL
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
141 * \param state the state
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
142 */
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
143 void
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
144 state_end(struct state *state);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
145
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
146 /**
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
147 * Shortcut for state->finish (if not NULL)
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
148 *
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
149 * \pre state != NULL
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
150 * \param state the state
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
151 */
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
152 void
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
153 state_finish(struct state *state);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
154
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 164
diff changeset
155 #endif /* !MOLKO_CORE_STATE_H */