annotate libmlk-adventure/adventure/state/mainmenu.c @ 282:a15f77eda9a4

adventure: rename functions
author David Demelier <markand@malikania.fr>
date Sun, 20 Dec 2020 11:04:41 +0100
parents 87b8c7510717
children 3991779aaba9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
2 * mainmenu.c -- game main menu
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <assert.h>
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdlib.h>
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <string.h>
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
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: 98
diff changeset
24 #include <core/event.h>
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents: 98
diff changeset
25 #include <core/font.h>
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents: 98
diff changeset
26 #include <core/game.h>
197
852d0b7817ce rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
27 #include <core/image.h>
121
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents: 98
diff changeset
28 #include <core/painter.h>
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents: 98
diff changeset
29 #include <core/panic.h>
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents: 98
diff changeset
30 #include <core/state.h>
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents: 98
diff changeset
31 #include <core/texture.h>
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
32 #include <core/util.h>
121
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents: 98
diff changeset
33 #include <core/window.h>
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
35 #include <ui/align.h>
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
36 #include <ui/label.h>
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
37 #include <ui/theme.h>
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
267
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
39 #include <adventure/assets.h>
263
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
40 #include <adventure/molko.h>
264
9bbbabb6f077 cmake: make macros simpler
David Demelier <markand@malikania.fr>
parents: 263
diff changeset
41 #include <adventure/adventure_p.h>
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
42
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
43 #include "mainmenu.h"
281
87b8c7510717 rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents: 267
diff changeset
44 #include "continue.h"
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
46 struct self {
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
47 struct state state;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
48
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
49 struct {
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
50 struct texture tex;
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
51 int x;
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
52 int y;
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
53 } texts[4];
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
55 unsigned int itemsel; /* Selected item. */
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
56 };
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 static void
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 new(void)
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 {
263
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
61 molko_teleport("maps/map-world.map", -1, -1);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 static void
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 resume(void)
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 {
282
a15f77eda9a4 adventure: rename functions
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
67 game_switch(state_continue_new(), false);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 static void
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 quit(void)
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 {
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 game_quit();
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
75
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 static void
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
77 perform(struct self *self)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
79 assert(self->itemsel < 3);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 static void (*handlers[])(void) = {
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 [0] = new,
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 [1] = resume,
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 [2] = quit
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 };
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
86
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
87 handlers[self->itemsel]();
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
88 }
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
89
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
90 static void
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
91 init_title(struct self *self, struct font *font)
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
92 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
93 if (!font_render(font, &self->texts[3].tex, "Molko's Adventure", 0x000000ff))
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
94 panic();
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
95
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
96 /* Align header. */
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
97 align(ALIGN_CENTER, &self->texts[3].x, NULL, self->texts[3].tex.w, self->texts[3].tex.h,
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
98 0, 0, window.w, window.h);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
99
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
100 self->texts[3].y = self->texts[3].x;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
102
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 static void
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
104 init_items(struct self *self, struct font *font)
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
105 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
106 if (!font_render(font, &self->texts[0].tex, _("New"), 0x000000ff) ||
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
107 !font_render(font, &self->texts[1].tex, _("Continue"), 0x000000ff) ||
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
108 !font_render(font, &self->texts[2].tex, _("Quit"), 0x000000ff))
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
109 panic();
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
110
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
111 self->texts[0].x = (window.w / 2) - (self->texts[0].tex.w / 2);
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
112 self->texts[0].y = window.h * 0.75;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
113
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
114 self->texts[1].x = self->texts[0].x;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
115 self->texts[1].y = self->texts[0].y + self->texts[0].tex.h;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
116
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
117 self->texts[2].x = self->texts[0].x;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
118 self->texts[2].y = self->texts[1].y + self->texts[1].tex.h;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
119 }
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
120
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
121 static void
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
122 start(struct state *state)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
124 struct self *self = state->data;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
125 struct font fonts[2];
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
126
263
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
127 if (!font_open(&fonts[0], molko_path("fonts/teutonic.ttf"), 130) ||
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
128 !font_open(&fonts[1], molko_path("fonts/pirata-one.ttf"), 30))
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
129 panic();
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
130
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
131 fonts[0].style = fonts[1].style = FONT_STYLE_ANTIALIASED;
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
132
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
133 init_title(self, &fonts[0]);
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
134 init_items(self, &fonts[1]);
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
135
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
136 font_finish(&fonts[0]);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
137 font_finish(&fonts[1]);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
138 }
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
139
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
140 static void
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
141 handle(struct state *state, const union event *event)
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
142 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
143 struct self *self = state->data;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
144
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 switch (event->type) {
265
11db1d425502 adventure: catch EVENT_QUIT
David Demelier <markand@malikania.fr>
parents: 264
diff changeset
146 case EVENT_QUIT:
11db1d425502 adventure: catch EVENT_QUIT
David Demelier <markand@malikania.fr>
parents: 264
diff changeset
147 game_quit();
11db1d425502 adventure: catch EVENT_QUIT
David Demelier <markand@malikania.fr>
parents: 264
diff changeset
148 break;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 case EVENT_KEYDOWN:
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 switch (event->key.key) {
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 case KEY_UP:
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
152 self->itemsel = self->itemsel == 0 ? 2 : self->itemsel - 1;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 case KEY_DOWN:
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
155 self->itemsel = (self->itemsel + 1) % 3;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 case KEY_ENTER:
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
158 perform(self);
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
159 break;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 default:
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 default:
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
168
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 static void
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
170 draw(struct state *state)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
172 struct self *self = state->data;
267
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
173 struct sprite *cursor = assets_sprites[ASSETS_SPRITE_UI_CURSOR];
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
174 int x, y;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
175
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
176 painter_set_color(0xffffffff);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
177 painter_clear();
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
178
261
bfde372bf152 core: prefix utilities with util_
David Demelier <markand@malikania.fr>
parents: 259
diff changeset
179 for (size_t i = 0; i < UTIL_SIZE(self->texts); ++i)
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
180 texture_draw(&self->texts[i].tex, self->texts[i].x, self->texts[i].y);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
181
267
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
182 x = self->texts[self->itemsel].x;
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
183 x -= cursor->cellw * 2;
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
184 y = self->texts[self->itemsel].y;
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
185 y += self->texts[self->itemsel].tex.h / 2;
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
186 y -= cursor->cellh / 2;
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
187
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
188 sprite_draw(cursor, 1, 2, x, y);
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 197
diff changeset
189 painter_present();
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
191
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 static void
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
193 finish(struct state *state)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
195 struct self *self = state->data;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
196
261
bfde372bf152 core: prefix utilities with util_
David Demelier <markand@malikania.fr>
parents: 259
diff changeset
197 for (size_t i = 0; i < UTIL_SIZE(self->texts); ++i)
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
198 texture_finish(&self->texts[i].tex);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
199
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
200 free(self);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
202
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
203 struct state *
282
a15f77eda9a4 adventure: rename functions
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
204 state_mainmenu_new(void)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
206 struct self *self;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
207
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
208 self = alloc_new0(sizeof (*self));
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
209 self->state.data = self;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
210 self->state.start = start;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
211 self->state.handle = handle;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
212 self->state.draw = draw;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
213 self->state.finish = finish;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
214
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
215 return &self->state;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
216 }