Mercurial > molko
annotate libadventure/adventure/state/splashscreen.c @ 162:629f55f3961e
core: rework states
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 18 Oct 2020 12:01:59 +0200 |
parents | libadventure/adventure/splashscreen_state.c@c577c15df07f |
children | 6992085d47fd |
rev | line source |
---|---|
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
162 | 2 * splashscreen.c -- splash screen state |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
162 | 19 #include <assert.h> |
20 #include <stdlib.h> | |
21 #include <string.h> | |
22 | |
121
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
23 #include <core/font.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
24 #include <core/game.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
25 #include <core/image.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
26 #include <core/painter.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
27 #include <core/panic.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
28 #include <core/state.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
29 #include <core/sys.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
30 #include <core/texture.h> |
162 | 31 #include <core/util.h> |
121
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
32 #include <core/window.h> |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 |
162 | 34 #include <ui/align.h> |
148
c577c15df07f
misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
35 |
162 | 36 #include <adventure/assets/fonts/cubic.h> |
131 | 37 |
162 | 38 #include "splashscreen.h" |
39 #include "mainmenu.h" | |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 |
162 | 41 #define DELAY 3000 |
80
05ffbcdee585
adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
42 |
162 | 43 struct splashscreen { |
44 struct texture tex; | |
45 int x; | |
46 int y; | |
47 struct state *next; | |
48 unsigned int elapsed; | |
49 }; | |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 |
162 | 51 static struct splashscreen * |
52 init(struct state *next) | |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 { |
162 | 54 struct splashscreen *splash; |
55 struct font font; | |
80
05ffbcdee585
adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
56 |
162 | 57 splash = ecalloc(1, sizeof (*splash)); |
58 splash->next = next; | |
59 | |
60 if (!font_openmem(&font, fonts_cubic, sizeof (fonts_cubic), 80)) | |
95
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
61 panic(); |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 |
162 | 63 font.color = 0x19332dff; |
64 font.style = FONT_STYLE_ANTIALIASED; | |
65 | |
66 if (!font_render(&font, &splash->tex, "malikania")) | |
67 panic(); | |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 |
162 | 69 align(ALIGN_CENTER, &splash->x, &splash->y, splash->tex.w, splash->tex.h, |
70 0, 0, window.w, window.h); | |
71 font_finish(&font); | |
80
05ffbcdee585
adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
72 |
162 | 73 return splash; |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 } |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 static void |
162 | 77 update(struct state *state, unsigned int ticks) |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 { |
162 | 79 struct splashscreen *splash = state->data; |
80 | |
81 splash->elapsed += ticks; | |
82 | |
83 if (splash->elapsed >= DELAY) | |
84 game_switch(splash->next, false); | |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 } |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 static void |
162 | 88 draw(struct state *state) |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 { |
162 | 90 struct splashscreen *splash = state->data; |
91 | |
92 painter_set_color(0xffffffff); | |
93 painter_clear(); | |
94 texture_draw(&splash->tex, splash->x, splash->y); | |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 } |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 static void |
162 | 98 finish(struct state *state) |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 { |
162 | 100 struct splashscreen *splash = state->data; |
101 | |
102 if (!splash) | |
103 return; | |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 |
162 | 105 texture_finish(&splash->tex); |
106 | |
107 free(splash); | |
108 memset(state, 0, sizeof (*state)); | |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 } |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 |
162 | 111 void |
112 splashscreen_state(struct state *state, struct state *next) | |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 { |
162 | 114 assert(state); |
115 assert(next); | |
116 | |
117 memset(state, 0, sizeof (*state)); | |
118 state->data = init(next); | |
119 state->update = update; | |
120 state->draw = draw; | |
121 state->finish = finish; | |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 } |