annotate libmlk-adventure/adventure/state/mainmenu.c @ 264:9bbbabb6f077

cmake: make macros simpler
author David Demelier <markand@malikania.fr>
date Wed, 09 Dec 2020 21:22:21 +0100
parents cd5bdb995052
children 11db1d425502
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
263
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
39 #include <adventure/molko.h>
264
9bbbabb6f077 cmake: make macros simpler
David Demelier <markand@malikania.fr>
parents: 263
diff changeset
40 #include <adventure/adventure_p.h>
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
42 #include "mainmenu.h"
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
43
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
44 struct self {
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
45 struct state state;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
46
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
47 struct {
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
48 struct texture tex;
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
49 int x;
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
50 int y;
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
51 } texts[4];
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
53 unsigned int itemsel; /* Selected item. */
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
54 };
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 static void
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 new(void)
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 {
263
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
59 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
60 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 static void
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 resume(void)
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 {
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
65 /* TODO: implement here. */
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
67
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 static void
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 quit(void)
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 {
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 game_quit();
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
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 static void
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
75 perform(struct self *self)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
77 assert(self->itemsel < 3);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
78
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 static void (*handlers[])(void) = {
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 [0] = new,
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 [1] = resume,
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 [2] = quit
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 };
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
84
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
85 handlers[self->itemsel]();
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
86 }
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
87
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
88 static void
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
89 init_title(struct self *self, struct font *font)
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
90 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
91 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
92 panic();
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
93
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
94 /* Align header. */
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
95 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
96 0, 0, window.w, window.h);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
97
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
98 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
99 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
100
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 static void
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
102 init_items(struct self *self, struct font *font)
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
103 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
104 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
105 !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
106 !font_render(font, &self->texts[2].tex, _("Quit"), 0x000000ff))
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
107 panic();
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
108
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
109 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
110 self->texts[0].y = window.h * 0.75;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
111
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
112 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
113 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
114
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
115 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
116 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
117 }
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
118
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
119 static void
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
120 start(struct state *state)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
122 struct self *self = state->data;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
123 struct font fonts[2];
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
124
263
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
125 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
126 !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
127 panic();
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
128
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
129 fonts[0].style = fonts[1].style = FONT_STYLE_ANTIALIASED;
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
130
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
131 init_title(self, &fonts[0]);
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
132 init_items(self, &fonts[1]);
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
133
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
134 font_finish(&fonts[0]);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
135 font_finish(&fonts[1]);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
136 }
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
137
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
138 static void
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
139 handle(struct state *state, const union event *event)
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
140 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
141 struct self *self = state->data;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
142
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 switch (event->type) {
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 case EVENT_KEYDOWN:
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 switch (event->key.key) {
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 case KEY_UP:
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
147 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
148 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 case KEY_DOWN:
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
150 self->itemsel = (self->itemsel + 1) % 3;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 case KEY_ENTER:
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
153 perform(self);
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
154 break;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 default:
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 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 default:
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 }
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
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 static void
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
165 draw(struct state *state)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
167 struct self *self = state->data;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
168
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
169 painter_set_color(0xffffffff);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
170 painter_clear();
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
171
261
bfde372bf152 core: prefix utilities with util_
David Demelier <markand@malikania.fr>
parents: 259
diff changeset
172 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
173 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
174
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
175 /* TODO: a sword here. */
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
176 painter_set_color(0x000000ff);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
177 painter_draw_rectangle(
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
178 self->texts[self->itemsel].x - 30,
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
179 self->texts[self->itemsel].y + 11, 15, 15);
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 197
diff changeset
180 painter_present();
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
182
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 static void
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
184 finish(struct state *state)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
186 struct self *self = state->data;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
187
261
bfde372bf152 core: prefix utilities with util_
David Demelier <markand@malikania.fr>
parents: 259
diff changeset
188 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
189 texture_finish(&self->texts[i].tex);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
190
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
191 free(self);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
193
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
194 struct state *
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
195 mainmenu_state_new(void)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
197 struct self *self;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
198
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
199 self = alloc_new0(sizeof (*self));
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
200 self->state.data = self;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
201 self->state.start = start;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
202 self->state.handle = handle;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
203 self->state.draw = draw;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
204 self->state.finish = finish;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
205
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
206 return &self->state;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
207 }