annotate libmlk-adventure/adventure/state/mainmenu.c @ 290:9948e288925b

rpg: add support for items in battle
author David Demelier <markand@malikania.fr>
date Fri, 08 Jan 2021 12:56:10 +0100
parents 3991779aaba9
children 196264679079
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
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 282
diff changeset
39 #include <rpg/character.h>
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 282
diff changeset
40
267
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
41 #include <adventure/assets.h>
263
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
42 #include <adventure/molko.h>
264
9bbbabb6f077 cmake: make macros simpler
David Demelier <markand@malikania.fr>
parents: 263
diff changeset
43 #include <adventure/adventure_p.h>
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
44
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
45 #include <adventure/item/potion.h>
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 282
diff changeset
46 #include <adventure/character/neth.h>
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 282
diff changeset
47
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
48 #include "mainmenu.h"
281
87b8c7510717 rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents: 267
diff changeset
49 #include "continue.h"
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
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 struct self {
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
52 struct state state;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
53
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
54 struct {
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
55 struct texture tex;
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
56 int x;
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
57 int y;
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
58 } texts[4];
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
60 unsigned int itemsel; /* Selected item. */
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
61 };
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 static void
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 new(void)
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 {
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 282
diff changeset
66 /* TODO: temporary. */
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 282
diff changeset
67 molko.team.members[0] = &character_neth;
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 282
diff changeset
68 character_reset(molko.team.members[0]);
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 282
diff changeset
69 molko.team.members[0]->hp = molko.team.members[0]->hpmax;
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 282
diff changeset
70 molko.team.members[0]->mp = molko.team.members[0]->mpmax;
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
71 inventory_add(&molko.inventory, &item_potion, 10);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
72
263
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
73 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
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
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 resume(void)
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 {
282
a15f77eda9a4 adventure: rename functions
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
79 game_switch(state_continue_new(), false);
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
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 static void
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 quit(void)
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 {
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 game_quit();
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
87
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 static void
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
89 perform(struct self *self)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
91 assert(self->itemsel < 3);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
92
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 static void (*handlers[])(void) = {
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 [0] = new,
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 [1] = resume,
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 [2] = quit
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 };
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
98
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
99 handlers[self->itemsel]();
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
100 }
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
101
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
102 static void
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
103 init_title(struct self *self, struct font *font)
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
104 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
105 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
106 panic();
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
107
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
108 /* Align header. */
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
109 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
110 0, 0, window.w, window.h);
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[3].y = self->texts[3].x;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
114
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 static void
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
116 init_items(struct self *self, struct font *font)
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
117 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
118 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
119 !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
120 !font_render(font, &self->texts[2].tex, _("Quit"), 0x000000ff))
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
121 panic();
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
122
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
123 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
124 self->texts[0].y = window.h * 0.75;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
125
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
126 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
127 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
128
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
129 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
130 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
131 }
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
132
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
133 static void
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
134 start(struct state *state)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
136 struct self *self = state->data;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
137 struct font fonts[2];
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
138
263
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
139 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
140 !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
141 panic();
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
142
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
143 fonts[0].style = fonts[1].style = FONT_STYLE_ANTIALIASED;
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
144
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
145 init_title(self, &fonts[0]);
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
146 init_items(self, &fonts[1]);
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
147
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
148 font_finish(&fonts[0]);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
149 font_finish(&fonts[1]);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
150 }
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
151
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
152 static void
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
153 handle(struct state *state, const union event *event)
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
154 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
155 struct self *self = state->data;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
156
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 switch (event->type) {
265
11db1d425502 adventure: catch EVENT_QUIT
David Demelier <markand@malikania.fr>
parents: 264
diff changeset
158 case EVENT_QUIT:
11db1d425502 adventure: catch EVENT_QUIT
David Demelier <markand@malikania.fr>
parents: 264
diff changeset
159 game_quit();
11db1d425502 adventure: catch EVENT_QUIT
David Demelier <markand@malikania.fr>
parents: 264
diff changeset
160 break;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 case EVENT_KEYDOWN:
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 switch (event->key.key) {
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 case KEY_UP:
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
164 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
165 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 case KEY_DOWN:
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
167 self->itemsel = (self->itemsel + 1) % 3;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 case KEY_ENTER:
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
170 perform(self);
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
171 break;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 default:
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 default:
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 break;
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
180
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 static void
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
182 draw(struct state *state)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
184 struct self *self = state->data;
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 282
diff changeset
185 struct sprite *cursor = &assets_sprites[ASSETS_SPRITE_UI_CURSOR];
267
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
186 int x, y;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
187
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
188 painter_set_color(0xffffffff);
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
189 painter_clear();
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
190
261
bfde372bf152 core: prefix utilities with util_
David Demelier <markand@malikania.fr>
parents: 259
diff changeset
191 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
192 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
193
267
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
194 x = self->texts[self->itemsel].x;
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
195 x -= cursor->cellw * 2;
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
196 y = self->texts[self->itemsel].y;
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
197 y += self->texts[self->itemsel].tex.h / 2;
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
198 y -= cursor->cellh / 2;
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
199
bead76f6c793 adventure: start a global assets registry
David Demelier <markand@malikania.fr>
parents: 265
diff changeset
200 sprite_draw(cursor, 1, 2, x, y);
212
ddfe0a211169 rpg: experiment with map teleport
David Demelier <markand@malikania.fr>
parents: 197
diff changeset
201 painter_present();
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
203
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 static void
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
205 finish(struct state *state)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
207 struct self *self = state->data;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
208
261
bfde372bf152 core: prefix utilities with util_
David Demelier <markand@malikania.fr>
parents: 259
diff changeset
209 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
210 texture_finish(&self->texts[i].tex);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
211
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
212 free(self);
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 }
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
214
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
215 struct state *
282
a15f77eda9a4 adventure: rename functions
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
216 state_mainmenu_new(void)
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 {
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
218 struct self *self;
80
05ffbcdee585 adventure: create main menu, closes #2482 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
219
259
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
220 self = alloc_new0(sizeof (*self));
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
221 self->state.data = self;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
222 self->state.start = start;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
223 self->state.handle = handle;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
224 self->state.draw = draw;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
225 self->state.finish = finish;
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
226
16be1ad3ddba adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
227 return &self->state;
162
629f55f3961e core: rework states
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
228 }