annotate libmlk-core/mlk/core/game.c @ 646:7e1eb7f6c049 default tip @

misc: remove .clang
author David Demelier <markand@malikania.fr>
date Sun, 04 Feb 2024 15:24:37 +0100
parents 83781cc87fca
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 /*
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * game.c -- main game object
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
45
e10fd1b6323f core: implement splashscreen, closes #2458 @1h
David Demelier <markand@malikania.fr>
parents: 44
diff changeset
19 #include <assert.h>
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents: 45
diff changeset
20 #include <string.h>
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
21 #include <setjmp.h>
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
23 #include "clock.h"
586
4349b591c3ac cmake: put NLS back
David Demelier <markand@malikania.fr>
parents: 585
diff changeset
24 #include "core_p.h"
522
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
25 #include "err.h"
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
26 #include "event.h"
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include "game.h"
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include "state.h"
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
29 #include "util.h"
248
37771eaf4245 core: use vsync and improve game loop
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
30 #include "window.h"
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
32 enum {
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
33 JMP_OK = 0,
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
34 JMP_PUSH,
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
35 JMP_POP
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
36 };
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
37
522
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
38 static struct mlk_state *states[8];
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
39 static jmp_buf game_jmp_buf;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
40 static int game_jmp_allowed;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
41 static int game_run = 1;
522
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
42
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
43 struct mlk_game mlk_game = {
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
44 .states = states,
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
45 .statesz = MLK_UTIL_SIZE(states)
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
46 };
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
47
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 void
522
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
49 mlk_game_init(void)
311
f10fd1293a7e core: fix states + tests
David Demelier <markand@malikania.fr>
parents: 300
diff changeset
50 {
522
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
51 for (size_t i = 0; i < mlk_game.statesz; ++i)
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
52 mlk_game.states[i] = NULL;
311
f10fd1293a7e core: fix states + tests
David Demelier <markand@malikania.fr>
parents: 300
diff changeset
53 }
f10fd1293a7e core: fix states + tests
David Demelier <markand@malikania.fr>
parents: 300
diff changeset
54
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
55 _Noreturn int
469
0d6206cee6b9 core: state -> mlk_state
David Demelier <markand@malikania.fr>
parents: 454
diff changeset
56 mlk_game_push(struct mlk_state *state)
45
e10fd1b6323f core: implement splashscreen, closes #2458 @1h
David Demelier <markand@malikania.fr>
parents: 44
diff changeset
57 {
e10fd1b6323f core: implement splashscreen, closes #2458 @1h
David Demelier <markand@malikania.fr>
parents: 44
diff changeset
58 assert(state);
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
59 assert(game_jmp_allowed);
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 147
diff changeset
60
522
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
61 if (mlk_game.state == &mlk_game.states[mlk_game.statesz - 1])
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
62 mlk_errf(_("no space in game states stack"));
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
63
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
64 mlk_game.state[1] = state;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
65 longjmp(game_jmp_buf, JMP_PUSH);
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
66 }
522
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
67
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
68 _Noreturn void
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
69 mlk_game_pop(void)
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
70 {
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
71 assert(game_jmp_allowed);
522
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
72
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
73 longjmp(game_jmp_buf, JMP_POP);
45
e10fd1b6323f core: implement splashscreen, closes #2458 @1h
David Demelier <markand@malikania.fr>
parents: 44
diff changeset
74 }
e10fd1b6323f core: implement splashscreen, closes #2458 @1h
David Demelier <markand@malikania.fr>
parents: 44
diff changeset
75
299
648f5f949afb core: implement stackable states
David Demelier <markand@malikania.fr>
parents: 298
diff changeset
76 void
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
77 mlk_game_loop(struct mlk_state *state)
260
60a214ec1ab4 adventure: change the way states are stored
David Demelier <markand@malikania.fr>
parents: 248
diff changeset
78 {
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
79 assert(state);
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents: 45
diff changeset
80
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
81 struct mlk_clock clock = {};
248
37771eaf4245 core: use vsync and improve game loop
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
82 unsigned int elapsed = 0;
37771eaf4245 core: use vsync and improve game loop
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
83 unsigned int frametime;
37771eaf4245 core: use vsync and improve game loop
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
84
485
3ff1fe64d0cd core: window -> mlk_window
David Demelier <markand@malikania.fr>
parents: 474
diff changeset
85 if (mlk_window.framerate > 0)
3ff1fe64d0cd core: window -> mlk_window
David Demelier <markand@malikania.fr>
parents: 474
diff changeset
86 frametime = 1000 / mlk_window.framerate;
248
37771eaf4245 core: use vsync and improve game loop
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
87 else
583
5a4e5b852f8a core: make sure we never exceed 60FPS ticks
David Demelier <markand@malikania.fr>
parents: 547
diff changeset
88 /* Assuming 60.0 FPS. */
5a4e5b852f8a core: make sure we never exceed 60FPS ticks
David Demelier <markand@malikania.fr>
parents: 547
diff changeset
89 frametime = 1000.0 / 60.0;
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
90
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
91 game_jmp_allowed = 1;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
92
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
93 while (game_run) {
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
94 switch (setjmp(game_jmp_buf)) {
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
95 case JMP_OK:
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
96 /* Initial entrypoint. */
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
97 if (!mlk_game.state) {
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
98 mlk_game.states[0] = state;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
99 mlk_game.state = &mlk_game.states[0];
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
100 mlk_state_start(state);
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
101 }
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
102
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
103 mlk_clock_start(&clock);
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
104
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
105 for (union mlk_event ev; mlk_event_poll(&ev); ) {
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
106 if (mlk_game.state && !(mlk_game.inhibit & MLK_GAME_INHIBIT_INPUT))
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
107 mlk_state_handle(*mlk_game.state, ev);
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
108 }
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
109
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
110 if (mlk_game.state && !(mlk_game.inhibit & MLK_GAME_INHIBIT_UPDATE))
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
111 mlk_state_update(*mlk_game.state, ticks);
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
112 if (mlk_game.state && !(mlk_game.inhibit & MLK_GAME_INHIBIT_DRAW))
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
113 mlk_state_draw(*mlk_game.state);
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
114
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
115 /*
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
116 * If vsync is enabled, it should have wait, otherwise
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
117 * sleep a little to save CPU cycles.
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
118 */
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
119 if ((elapsed = mlk_clock_elapsed(&clock)) < frametime)
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
120 mlk_util_sleep(frametime - elapsed);
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
121
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
122 elapsed = mlk_clock_elapsed(&clock);
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
123
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
124 /*
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
125 * Cap to frametime if it's too slow because it would
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
126 * create unexpected results otherwise.
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
127 */
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
128 if (elapsed > frametime)
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
129 elapsed = frametime;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
130 break;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
131 case JMP_PUSH:
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
132 /*
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
133 * We have pushed a new state, suspend should not modify
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
134 * the stack because we would have a leak in the next
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
135 * state being overriden without being finalized.
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
136 */
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
137 game_jmp_allowed = 0;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
138 mlk_state_suspend(*mlk_game.state);
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
139 game_jmp_allowed = 1;
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
140
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
141 /* Start next state. */
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
142 mlk_state_start(*++mlk_game.state);
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
143 break;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
144 case JMP_POP:
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
145 /*
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
146 * We need to finalize this state so the end/finish
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
147 * functions are not allowed to modify the stack.
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
148 */
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
149 game_jmp_allowed = 0;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
150 mlk_state_end(*mlk_game.state);
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
151 mlk_state_finish(*mlk_game.state);
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
152 game_jmp_allowed = 1;
583
5a4e5b852f8a core: make sure we never exceed 60FPS ticks
David Demelier <markand@malikania.fr>
parents: 547
diff changeset
153
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
154 /* Resume previous state. */
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
155 if (mlk_game.state == mlk_game.states)
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
156 mlk_game.state = NULL;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
157 else
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
158 mlk_state_resume(*--mlk_game.state);
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
159 break;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
160 default:
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
161 break;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
162 }
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
163 }
44
c97fe725fdeb core: implement basic states, closes #2457 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 }
57
9f6267843815 core: implement basic actions, closes #2463 @1h
David Demelier <markand@malikania.fr>
parents: 45
diff changeset
165
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents: 78
diff changeset
166 void
452
f89147faf8cf core: game -> mlk_game
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
167 mlk_game_quit(void)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents: 78
diff changeset
168 {
645
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
169 game_jmp_allowed = 0;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
170 game_run = 0;
83781cc87fca core: rework game stack state mechanism
David Demelier <markand@malikania.fr>
parents: 586
diff changeset
171
522
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
172 for (size_t i = 0; i < mlk_game.statesz; ++i) {
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
173 if (mlk_game.states[i])
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
174 mlk_state_finish(mlk_game.states[i]);
300
3638b39ef2bf examples: fix with new game_push function
David Demelier <markand@malikania.fr>
parents: 299
diff changeset
175
522
f45a023f6690 core: doxygenize game
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
176 mlk_game.states[i] = NULL;
311
f10fd1293a7e core: fix states + tests
David Demelier <markand@malikania.fr>
parents: 300
diff changeset
177 }
529
7e835d43ef74 core: fix game crash
David Demelier <markand@malikania.fr>
parents: 522
diff changeset
178
7e835d43ef74 core: fix game crash
David Demelier <markand@malikania.fr>
parents: 522
diff changeset
179 mlk_game.state = NULL;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents: 78
diff changeset
180 }