Mercurial > molko
annotate libmlk-rpg/rpg/battle-bar.c @ 243:71b3b7036de7
misc: lot of cleanups,
- prefix libraries with libmlk,
- move assets from source directories closes #2520,
- prefix header guards closes #2519
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 28 Nov 2020 22:37:30 +0100 |
parents | librpg/rpg/battle-bar.c@76afe639fd72 |
children | bfde372bf152 |
rev | line source |
---|---|
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * battle-bar.h -- battle status bar and menu |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <assert.h> |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <stdio.h> |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <string.h> |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <core/event.h> |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include <core/font.h> |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <core/window.h> |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include <core/util.h> |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 #include <ui/align.h> |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 #include <ui/theme.h> |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 #include "battle.h" |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 #include "battle-bar.h" |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 #include "character.h" |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 #include "spell.h" |
241
76afe639fd72
misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents:
221
diff
changeset
|
35 #include "rpg_p.h" |
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 static void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 draw_status_character_stats(const struct battle *bt, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 const struct character *ch, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 int x, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 int y, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 unsigned int w, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 unsigned int h) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 struct theme *theme = BATTLE_THEME(bt); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 struct label label; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 unsigned int spacing, lw, lh; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 char line[64]; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 /* Compute spacing between elements. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 spacing = h - (font_height(theme->fonts[THEME_FONT_INTERFACE]) * 3); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 spacing /= 4; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 /* Reuse the same label. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 label.theme = theme; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 label.text = line; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 label.flags = LABEL_FLAGS_SHADOW; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 /* HP. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 snprintf(line, sizeof (line), "%d/%u", ch->hp, ch->hpmax); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 label_query(&label, &lw, &lh); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 label.x = x + w - lw - theme->padding; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 label.y = y + spacing; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 label_draw(&label); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 /* MP. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 snprintf(line, sizeof (line), "%d/%u", ch->mp, ch->mpmax); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 label_query(&label, &lw, &lh); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 label.x = x + w - lw - theme->padding; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 label.y = label.y + lh + spacing; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 label_draw(&label); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 /* Status. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 /* TODO: list all status. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 static void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 draw_status_character(const struct battle_bar *bar, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 const struct battle *bt, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 const struct character *ch, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 unsigned int index) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 int x, y; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 unsigned int w, h; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 /* Compute bounding box for rendering. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 w = bar->status_frame.w / BATTLE_TEAM_MAX; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 h = bar->status_frame.h; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 x = bar->status_frame.x + (index * w); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 y = bar->status_frame.y; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 draw_status_character_stats(bt, ch, x, y, w, h); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 static void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 draw_status_characters(const struct battle_bar *bar, const struct battle *bt) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 const struct battle_entity *et; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 unsigned int index = 0; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 BATTLE_TEAM_FOREACH(bt, et) { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 if (character_ok(et->ch)) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 draw_status_character(bar, bt, et->ch, index); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 ++index; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 static void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 draw_status(const struct battle_bar *bar, const struct battle *bt) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 frame_draw(&bar->status_frame); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 draw_status_characters(bar, bt); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 static void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 draw_menu(const struct battle_bar *bar, const struct battle *bt) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 { |
241
76afe639fd72
misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents:
221
diff
changeset
|
119 struct { |
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 unsigned int w, h; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 enum align align; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 struct label label; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 } buttons[] = { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 .align = ALIGN_TOP, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 .label = { |
241
76afe639fd72
misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents:
221
diff
changeset
|
127 .text = _("Attack"), |
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 .flags = LABEL_FLAGS_SHADOW |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 }, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 .align = ALIGN_RIGHT, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 .label = { |
241
76afe639fd72
misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents:
221
diff
changeset
|
134 .text = _("Magic"), |
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 .flags = LABEL_FLAGS_SHADOW |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 }, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 .align = ALIGN_BOTTOM, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 .label = { |
241
76afe639fd72
misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents:
221
diff
changeset
|
141 .text = _("Objects"), |
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 .flags = LABEL_FLAGS_SHADOW |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 }, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 .align = ALIGN_LEFT, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 .label = { |
241
76afe639fd72
misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents:
221
diff
changeset
|
148 .text = _("Special"), |
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 .flags = LABEL_FLAGS_SHADOW |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 }; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 struct theme theme; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 int bx, by; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 unsigned int bw, bh; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 /* Copy theme according to menu selection. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 theme_shallow(&theme, bt->theme); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 /* Compute bounding box with margins removed. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 bx = bar->menu_frame.x + theme.padding; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 by = bar->menu_frame.y + theme.padding; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 bw = bar->menu_frame.w - theme.padding * 2; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 bh = bar->menu_frame.h - theme.padding * 2; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 /* Draw menu frame. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 frame_draw(&bar->menu_frame); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 for (size_t i = 0; i < NELEM(buttons); ++i) { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 buttons[i].label.theme = &theme; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 label_query(&buttons[i].label, &buttons[i].w, &buttons[i].h); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 /* Change theme if it's selected. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 if ((size_t)bar->menu == i && bar->state != BATTLE_BAR_STATE_NONE) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 theme.colors[THEME_COLOR_NORMAL] = BATTLE_THEME(bt)->colors[THEME_COLOR_SELECTED]; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 else |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 theme.colors[THEME_COLOR_NORMAL] = BATTLE_THEME(bt)->colors[THEME_COLOR_NORMAL]; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 align(buttons[i].align, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 &buttons[i].label.x, &buttons[i].label.y, buttons[i].w, buttons[i].h, |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 bx, by, bw, bh); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 label_draw(&buttons[i].label); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 static void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 draw_sub(const struct battle_bar *bar) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 gridmenu_draw(&bar->sub_grid); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 static bool |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 handle_keydown(struct battle_bar *bar, const union event *ev) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 assert(ev->type == EVENT_KEYDOWN); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 switch (bar->state) { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 case BATTLE_BAR_STATE_MENU: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 /* We are selecting a main menu entry. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 switch (ev->key.key) { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 case KEY_UP: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 bar->menu = BATTLE_BAR_MENU_ATTACK; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 break; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 case KEY_RIGHT: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 bar->menu = BATTLE_BAR_MENU_MAGIC; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 break; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 case KEY_DOWN: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 bar->menu = BATTLE_BAR_MENU_OBJECTS; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 break; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 case KEY_LEFT: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
213 bar->menu = BATTLE_BAR_MENU_SPECIAL; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 break; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
215 case KEY_ENTER: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
216 return true; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
217 default: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
218 break; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
220 break; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 case BATTLE_BAR_STATE_SUB: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 /* We are in the sub menu (objects/spells). */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
223 gridmenu_handle(&bar->sub_grid, ev); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
224 return bar->sub_grid.state == GRIDMENU_STATE_ACTIVATED; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
225 default: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 break; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
229 return false; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
230 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
231 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
232 static bool |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 handle_clickdown(struct battle_bar *bar, const union event *ev) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
235 assert(ev->type == EVENT_CLICKDOWN); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
236 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
237 switch (bar->state) { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
238 case BATTLE_BAR_STATE_MENU: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 /* We are selecting a main menu entry. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
240 /* TODO: implement click here too. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 break; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
242 case BATTLE_BAR_STATE_SUB: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
243 /* We are in the sub menu (objects/spells). */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
244 gridmenu_handle(&bar->sub_grid, ev); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
245 return bar->sub_grid.state == GRIDMENU_STATE_ACTIVATED; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
246 default: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
247 break; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
248 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
249 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
250 return false; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
251 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
252 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
253 void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
254 battle_bar_positionate(struct battle_bar *bar, const struct battle *bt) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
255 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
256 assert(bar); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
257 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
258 /* Menu in the middle of the bar (take 20%). */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
259 bar->menu_frame.w = bar->w * 0.2; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
260 bar->menu_frame.h = bar->h; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
261 bar->menu_frame.x = bar->x + (bar->w / 2) - (bar->menu_frame.w / 2); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
262 bar->menu_frame.y = window.h - bar->h; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
263 bar->menu_frame.theme = bt->theme; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
264 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
265 /* Status bar on the right. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
266 bar->status_frame.x = bar->menu_frame.x + bar->menu_frame.w; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
267 bar->status_frame.y = bar->menu_frame.y; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
268 bar->status_frame.w = (bar->w - bar->menu_frame.w) / 2; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
269 bar->status_frame.h = bar->h; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
270 bar->status_frame.theme = bt->theme; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
271 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
272 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
273 bool |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
274 battle_bar_handle(struct battle_bar *bar, const struct battle *bt, const union event *ev) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
275 { |
221 | 276 /* Not needed yet. */ |
277 (void)bt; | |
278 | |
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
279 assert(bar); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
280 assert(bt); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
281 assert(ev); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
282 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
283 if (bar->state == BATTLE_BAR_STATE_NONE) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
284 return false; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
285 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
286 switch (ev->type) { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
287 case EVENT_KEYDOWN: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
288 return handle_keydown(bar, ev); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
289 case EVENT_CLICKDOWN: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
290 return handle_clickdown(bar, ev); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
291 default: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
292 break; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
293 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
294 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
295 return false; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
296 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
297 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
298 void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
299 battle_bar_reset(struct battle_bar *bar) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
300 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
301 gridmenu_reset(&bar->sub_grid); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
302 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
303 bar->menu = BATTLE_BAR_MENU_ATTACK; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
304 bar->state = BATTLE_BAR_STATE_NONE; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
305 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
306 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
307 void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
308 battle_bar_open_menu(struct battle_bar *bar) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
309 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
310 bar->state = BATTLE_BAR_STATE_MENU; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
311 bar->menu = BATTLE_BAR_MENU_ATTACK; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
312 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
313 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
314 void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
315 battle_bar_open_spells(struct battle_bar *bar, const struct battle *bt, struct character *ch) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
316 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
317 /* Sub menu bar on the left, take same space as status. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
318 bar->sub_grid.x = bar->x; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
319 bar->sub_grid.y = bar->menu_frame.y; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
320 bar->sub_grid.w = bar->status_frame.w; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
321 bar->sub_grid.h = bar->h; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
322 bar->sub_grid.theme = bt->theme; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
323 bar->sub_grid.nrows = 3; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
324 bar->sub_grid.ncols = 4; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
325 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
326 memset(bar->sub_grid.menu, 0, sizeof (bar->sub_grid.menu)); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
327 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
328 for (size_t i = 0; i < CHARACTER_SPELL_MAX; ++i) { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
329 if (ch->spells[i]) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
330 bar->sub_grid.menu[i] = ch->spells[i]->name; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
331 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
332 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
333 gridmenu_repaint(&bar->sub_grid); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
334 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
335 bar->state = BATTLE_BAR_STATE_SUB; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
336 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
337 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
338 void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
339 battle_bar_draw(const struct battle_bar *bar, const struct battle *bt) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
340 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
341 assert(bar); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
342 assert(bt); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
343 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
344 draw_status(bar, bt); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
345 draw_menu(bar, bt); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
346 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
347 /* Sub menu is only shown if state is set to it. */ |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
348 if (bar->state == BATTLE_BAR_STATE_SUB) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
349 draw_sub(bar); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
350 } |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
351 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
352 void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
353 battle_bar_finish(struct battle_bar *bar) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
354 { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
355 assert(bar); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
356 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
357 gridmenu_finish(&bar->sub_grid); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
358 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
359 memset(bar, 0, sizeof (*bar)); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
360 } |