Mercurial > molko
annotate libmlk-adventure/adventure/state/splashscreen.c @ 282:a15f77eda9a4
adventure: rename functions
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 20 Dec 2020 11:04:41 +0100 |
parents | cd5bdb995052 |
children | 196264679079 |
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 | |
182
f6497ec74b49
core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
174
diff
changeset
|
23 #include <core/alloc.h> |
121
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
24 #include <core/font.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
25 #include <core/game.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
26 #include <core/image.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
27 #include <core/painter.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
28 #include <core/panic.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
29 #include <core/state.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
30 #include <core/sys.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
31 #include <core/texture.h> |
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 |
263
cd5bdb995052
cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents:
259
diff
changeset
|
36 #include <adventure/molko.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 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
43 struct self { |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
44 struct state state; |
162 | 45 struct texture tex; |
46 int x; | |
47 int y; | |
48 unsigned int elapsed; | |
49 }; | |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
51 static void |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
52 start(struct state *state) |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 { |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
54 struct self *self = state->data; |
162 | 55 struct font font; |
80
05ffbcdee585
adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
56 |
263
cd5bdb995052
cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents:
259
diff
changeset
|
57 if (!font_open(&font, molko_path("fonts/cubic.ttf"), 80)) |
95
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
58 panic(); |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 |
162 | 60 font.style = FONT_STYLE_ANTIALIASED; |
61 | |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
62 if (!font_render(&font, &self->tex, "malikania", 0x19332dff)) |
162 | 63 panic(); |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
65 align(ALIGN_CENTER, &self->x, &self->y, self->tex.w, self->tex.h, |
162 | 66 0, 0, window.w, window.h); |
67 font_finish(&font); | |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 } |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 static void |
162 | 71 update(struct state *state, unsigned int ticks) |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 { |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
73 struct self *self = state->data; |
162 | 74 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
75 self->elapsed += ticks; |
162 | 76 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
77 if (self->elapsed >= DELAY) |
282
a15f77eda9a4
adventure: rename functions
David Demelier <markand@malikania.fr>
parents:
263
diff
changeset
|
78 game_switch(state_mainmenu_new(), false); |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 } |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 static void |
162 | 82 draw(struct state *state) |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 { |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
84 struct self *self = state->data; |
162 | 85 |
86 painter_set_color(0xffffffff); | |
87 painter_clear(); | |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
88 texture_draw(&self->tex, self->x, self->y); |
212
ddfe0a211169
rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents:
197
diff
changeset
|
89 painter_present(); |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 } |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 static void |
162 | 93 finish(struct state *state) |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 { |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
95 struct self *self = state->data; |
162 | 96 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
97 texture_finish(&self->tex); |
162 | 98 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
99 free(self); |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 } |
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
102 struct state * |
282
a15f77eda9a4
adventure: rename functions
David Demelier <markand@malikania.fr>
parents:
263
diff
changeset
|
103 state_splashscreen_new(void) |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 { |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
105 struct self *self; |
162 | 106 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
107 self = alloc_new0(sizeof (*self)); |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
108 self->state.data = self; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
109 self->state.start = start; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
110 self->state.update = update; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
111 self->state.draw = draw; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
112 self->state.finish = finish; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
113 |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
114 return &self->state; |
59
52792b863ff7
misc: separate core from game
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 } |