annotate libmlk-adventure/adventure/state/mainmenu.c @ 259:16be1ad3ddba

adventure: start working on maps and teleport
author David Demelier <markand@malikania.fr>
date Sun, 06 Dec 2020 11:22:03 +0100
parents 71b3b7036de7
children bfde372bf152
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
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
39 #include <assets/fonts/teutonic.h>
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
40 #include <assets/fonts/pirata-one.h>
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
42 #include "adventure_p.h"
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
43 #include "mainmenu.h"
197
852d0b7817ce rpg: map, extreme cleanup, closes #2508 @4h
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
44 #include "molko.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 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
61 molko_teleport("assets/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 {
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
67 /* TODO: implement here. */
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
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
127 if (!font_openmem(&fonts[0], fonts_teutonic, sizeof (fonts_teutonic), 130) ||
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
128 !font_openmem(&fonts[1], fonts_pirata_one, sizeof (fonts_pirata_one), 30))
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) {
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 case EVENT_KEYDOWN:
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 switch (event->key.key) {
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 case KEY_UP:
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
149 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
150 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 case KEY_DOWN:
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
152 self->itemsel = (self->itemsel + 1) % 3;
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_ENTER:
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
155 perform(self);
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
156 break;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 default:
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 }
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 default:
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 break;
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 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
165
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 static void
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
167 draw(struct state *state)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
169 struct self *self = state->data;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
170
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
171 painter_set_color(0xffffffff);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
172 painter_clear();
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
173
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
174 for (size_t i = 0; i < NELEM(self->texts); ++i)
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
175 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
176
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
177 /* TODO: a sword here. */
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
178 painter_set_color(0x000000ff);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
179 painter_draw_rectangle(
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
180 self->texts[self->itemsel].x - 30,
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
181 self->texts[self->itemsel].y + 11, 15, 15);
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 197
diff changeset
182 painter_present();
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
184
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 static void
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
186 finish(struct state *state)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
188 struct self *self = state->data;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
189
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
190 for (size_t i = 0; i < NELEM(self->texts); ++i)
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
191 texture_finish(&self->texts[i].tex);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
192
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
193 free(self);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
195
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
196 struct state *
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
197 mainmenu_state_new(void)
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 struct self *self;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
200
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
201 self = alloc_new0(sizeof (*self));
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
202 self->state.data = self;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
203 self->state.start = start;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
204 self->state.handle = handle;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
205 self->state.draw = draw;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
206 self->state.finish = finish;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
207
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
208 return &self->state;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
209 }