Mercurial > molko
annotate src/libmlk-rpg/rpg/battle-bar-default.c @ 428:26d23999a54b
core: get rid of zfile
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 15 Oct 2022 14:38:15 +0200 |
parents | 222045c513ec |
children | 8f59201dc76b |
rev | line source |
---|---|
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * battle-bar-default.c -- default battle status bar and menu implementation |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020-2022 David Demelier <markand@malikania.fr> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <assert.h> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <stdio.h> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <stdlib.h> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <string.h> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include <core/alloc.h> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <core/event.h> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include <core/font.h> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <core/sprite.h> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 #include <core/trace.h> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 #include <core/util.h> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 #include <core/window.h> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 #include <ui/align.h> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 #include <ui/theme.h> |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 #include "battle-bar-default.h" |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 #include "battle-bar.h" |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 #include "battle-state-item.h" |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 #include "battle-state-selection.h" |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 #include "battle.h" |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 #include "character.h" |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 #include "inventory.h" |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 #include "item.h" |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 #include "spell.h" |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
45 #define THEME(bar) ((bar)->theme ? (bar)->theme : theme_default()) |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
46 |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
47 struct geo { |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
48 int x, y; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
49 unsigned int w, h; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 }; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
52 static inline void |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
53 dimensions(struct geo geo[2], const struct battle_bar_default *bar) |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
54 { |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
55 /* 0 == main menu */ |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
56 geo[0].w = bar->w * 0.2; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
57 geo[0].h = bar->h; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
58 geo[0].x = bar->x + (bar->w / 2) - (geo[0].w / 2); |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
59 geo[0].y = window.h - bar->h; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
60 |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
61 /* 1 == status frame */ |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
62 geo[1].x = geo[0].x + geo[0].w; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
63 geo[1].y = geo[0].y; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
64 geo[1].w = (bar->w - geo[0].w) / 2; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
65 geo[1].h = bar->h; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
66 } |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
67 |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 /* |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 * The following validate_* functions are called when the user has validated a |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 * selection depending on the current menu (e.g. Magic, Items). |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 * |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 * They change the battle state to the appropriate one. |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 static void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 validate_attack(struct battle_bar_default *bar, struct battle *bt, const struct selection *sel) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 (void)bar; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 struct character *target; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 if (sel->index_side == 0) |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
83 target = bt->enemies[sel->index_character]->ch; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 else |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
85 target = bt->team[sel->index_character]->ch; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
87 battle_attack(bt, battle_current(bt)->ch, target); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 static void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 validate_magic(struct battle_bar_default *bar, struct battle *bt, const struct selection *sel) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 { |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
93 struct character *source = battle_current(bt)->ch; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
94 const struct spell *spell = source->spells[bar->grid.selected]; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 battle_cast(bt, source, spell, sel); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 static void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 validate_item(struct battle_bar_default *bar, struct battle *bt, const struct selection *sel) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 struct inventory_slot *slot; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 struct battle_entity *source, *target; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
105 if (bar->grid.selected >= INVENTORY_ITEM_MAX) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 return; |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
107 if (!(slot = &bt->inventory->items[bar->grid.selected])) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 return; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
110 source = battle_current(bt); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 target = sel->index_side == 0 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
112 ? bt->enemies[sel->index_character] |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
113 : bt->team[sel->index_character]; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 /* TODO: battle_use? */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 battle_state_item(bt, source, target, slot); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 /* |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 * The following functions are used to switch to the battle selection state |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 * using the appropriate selector algorithm. For example, an item can only be |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 * used on a unique target while a spell can have multiple choices. |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 static void |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
126 switch_selection_attack(struct battle_bar_default *bar, struct battle *bt) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 struct selection sel = { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 .allowed_kinds = SELECTION_KIND_ONE, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 .allowed_sides = SELECTION_SIDE_ENEMY, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 .index_side = 0 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 }; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
134 /* Disable handling anymore. */ |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
135 bar->state = BATTLE_BAR_DEFAULT_STATE_NONE; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 selection_first(&sel, bt); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 battle_state_selection(bt, &sel); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 static void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 switch_selection_spell(struct battle_bar_default *bar, struct battle *bt) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 { |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
144 const struct character *ch = battle_current(bt)->ch; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
145 const struct spell *sp = ch->spells[bar->grid.selected]; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 struct selection sel = {0}; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
148 if (bar->grid.selected > CHARACTER_SPELL_MAX) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 return; |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
150 if (!(sp = ch->spells[bar->grid.selected]) || sp->mp > (unsigned int)ch->mp) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 return; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 /* Use the spell selection algorithm to fill default values. */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 spell_select(sp, bt, &sel); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 battle_state_selection(bt, &sel); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 /* A cursor should be present. */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 if (!sprite_ok(BATTLE_THEME(bt)->sprites[THEME_SPRITE_CURSOR])) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 tracef("battle: no cursor sprite in theme"); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 static void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 switch_selection_item(struct battle *bt) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 const struct selection slt = { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 .allowed_kinds = SELECTION_KIND_ONE, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 .allowed_sides = SELECTION_SIDE_TEAM | SELECTION_SIDE_ENEMY, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 .index_side = 1, |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
169 .index_character = battle_index(bt) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 }; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 battle_state_selection(bt, &slt); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 /* |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 * The following functions actually draw the bar and their components depending |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 * on the current selected menu. |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 static void |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
181 draw_help(const struct battle_bar_default *bar, const char *what) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 struct label label = {0}; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 unsigned int lw = 0, lh = 0; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 label.flags = LABEL_FLAGS_SHADOW; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 label.text = what; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 label_query(&label, &lw, &lh); |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
189 label.x = bar->grid.x + (bar->grid.w / 2) - (lw / 2); |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
190 label.y = bar->grid.y - lh - THEME(bar)->padding; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 label_draw(&label); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 static void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 draw_spell_help(const struct battle_bar_default *bar, const struct battle *bt) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 { |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
197 const struct character *ch = battle_current(bt)->ch; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 const struct spell *sp; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
200 if (bar->grid.selected >= CHARACTER_SPELL_MAX) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 return; |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
202 if (!(sp = ch->spells[bar->grid.selected])) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 return; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
205 draw_help(bar, sp->description); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 static void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 draw_item_help(const struct battle_bar_default *bar, const struct battle *bt) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 const struct inventory_slot *slot; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
213 if (bar->grid.selected >= INVENTORY_ITEM_MAX) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 return; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
215 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
216 slot = &bt->inventory->items[bar->grid.selected]; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
217 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
218 if (!slot->item) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 return; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
220 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
221 draw_help(bar, slot->item->description); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
223 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
224 static void |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
225 draw_status_character_stats(const struct battle_bar_default *bar, |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 const struct character *ch, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 int x, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 int y, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
229 unsigned int h) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
230 { |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
231 const struct theme *theme = THEME(bar); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
232 struct label label; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 unsigned int spacing, lw, lh; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 char line[64]; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
235 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
236 /* Compute spacing between elements. */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
237 spacing = h - (font_height(theme->fonts[THEME_FONT_INTERFACE]) * 3); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
238 spacing /= 4; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
240 /* Reuse the same label. */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 label.theme = theme; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
242 label.text = line; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
243 label.flags = LABEL_FLAGS_SHADOW; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
244 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
245 /* Name. */ |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
246 snprintf(line, sizeof (line), "%s", ch->name); |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
247 label_query(&label, &lw, &lh); |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
248 label.x = x + theme->padding; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
249 label.y = y + spacing; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
250 label_draw(&label); |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
251 |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
252 /* HP. */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
253 snprintf(line, sizeof (line), "%d/%u", ch->hp, ch->hpmax); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
254 label_query(&label, &lw, &lh); |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
255 label.x = x + theme->padding; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
256 label.y = label.y + lh + spacing; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
257 label_draw(&label); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
258 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
259 /* MP. */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
260 snprintf(line, sizeof (line), "%d/%u", ch->mp, ch->mpmax); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
261 label_query(&label, &lw, &lh); |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
262 label.x = x + theme->padding; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
263 label.y = label.y + lh + spacing; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
264 label_draw(&label); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
265 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
266 /* Status. */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
267 /* TODO: list all status. */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
268 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
269 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
270 static void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
271 draw_status_character(const struct battle_bar_default *bar, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
272 const struct battle *bt, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
273 const struct character *ch, |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
274 const struct geo *geo, |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
275 unsigned int index) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
276 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
277 int x, y; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
278 unsigned int w, h; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
279 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
280 /* Compute bounding box for rendering. */ |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
281 w = geo->w / bt->teamsz; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
282 h = geo->h; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
283 x = geo->x + (index * w); |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
284 y = geo->y; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
285 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
286 draw_status_character_stats(bar, ch, x, y, h); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
287 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
288 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
289 static void |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
290 draw_status_characters(const struct battle_bar_default *bar, |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
291 const struct battle *bt, |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
292 const struct geo *geo) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
293 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
294 const struct battle_entity *et; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
295 unsigned int index = 0; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
296 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
297 BATTLE_TEAM_FOREACH(bt, et) { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
298 if (character_ok(et->ch)) |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
299 draw_status_character(bar, bt, et->ch, geo, index); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
300 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
301 ++index; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
302 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
303 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
304 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
305 static void |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
306 draw_status(const struct battle_bar_default *bar, const struct battle *bt, const struct geo *geo) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
307 { |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
308 frame_draw(&(const struct frame) { |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
309 .x = geo->x, |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
310 .y = geo->y, |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
311 .w = geo->w, |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
312 .h = geo->h |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
313 }); |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
314 |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
315 draw_status_characters(bar, bt, geo); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
316 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
317 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
318 static void |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
319 draw_menu(const struct battle_bar_default *bar, const struct geo *geo) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
320 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
321 struct { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
322 unsigned int w, h; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
323 enum align align; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
324 struct label label; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
325 } buttons[] = { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
326 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
327 .align = ALIGN_TOP, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
328 .label = { |
411
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
401
diff
changeset
|
329 .text = "Attack", |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
330 .flags = LABEL_FLAGS_SHADOW |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
331 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
332 }, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
333 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
334 .align = ALIGN_RIGHT, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
335 .label = { |
411
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
401
diff
changeset
|
336 .text = "Magic", |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
337 .flags = LABEL_FLAGS_SHADOW |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
338 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
339 }, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
340 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
341 .align = ALIGN_BOTTOM, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
342 .label = { |
411
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
401
diff
changeset
|
343 .text = "Objects", |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
344 .flags = LABEL_FLAGS_SHADOW |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
345 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
346 }, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
347 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
348 .align = ALIGN_LEFT, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
349 .label = { |
411
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
401
diff
changeset
|
350 .text = "Special", |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
351 .flags = LABEL_FLAGS_SHADOW |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
352 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
353 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
354 }; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
355 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
356 const struct theme *theme = THEME(bar); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
357 int bx, by; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
358 unsigned int bw, bh; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
359 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
360 /* Compute bounding box with margins removed. */ |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
361 bx = geo->x + theme->padding; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
362 by = geo->y + theme->padding; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
363 bw = geo->w - theme->padding * 2; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
364 bh = geo->h - theme->padding * 2; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
365 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
366 /* Draw menu frame. */ |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
367 frame_draw(&(const struct frame) { |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
368 .x = geo->x, |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
369 .y = geo->y, |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
370 .w = geo->w, |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
371 .h = geo->h |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
372 }); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
373 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
374 for (size_t i = 0; i < UTIL_SIZE(buttons); ++i) { |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
375 buttons[i].label.theme = theme; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
376 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
377 label_query(&buttons[i].label, &buttons[i].w, &buttons[i].h); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
378 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
379 /* Change theme if it's selected. */ |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
380 if ((size_t)bar->menu == i) |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
381 buttons[i].label.flags |= LABEL_FLAGS_SELECTED; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
382 else |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
383 buttons[i].label.flags &= ~LABEL_FLAGS_SELECTED; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
384 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
385 align(buttons[i].align, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
386 &buttons[i].label.x, &buttons[i].label.y, buttons[i].w, buttons[i].h, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
387 bx, by, bw, bh); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
388 label_draw(&buttons[i].label); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
389 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
390 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
391 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
392 /* |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
393 * This function is called only in the first level of the bar menu: selecting |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
394 * one of the Attack, Magic, Item and Special items. |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
395 */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
396 static void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
397 handle_keydown_menu(struct battle_bar_default *bar, struct battle *bt, const union event *ev) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
398 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
399 (void)bt; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
400 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
401 switch (ev->key.key) { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
402 case KEY_UP: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
403 bar->menu = BATTLE_BAR_DEFAULT_MENU_ATTACK; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
404 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
405 case KEY_RIGHT: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
406 bar->menu = BATTLE_BAR_DEFAULT_MENU_MAGIC; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
407 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
408 case KEY_DOWN: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
409 bar->menu = BATTLE_BAR_DEFAULT_MENU_ITEM; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
410 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
411 case KEY_LEFT: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
412 bar->menu = BATTLE_BAR_DEFAULT_MENU_SPECIAL; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
413 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
414 case KEY_ENTER: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
415 /* |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
416 * At this step, attack does not require opening the sub menu so |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
417 * we change selection state immediately if needed. |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
418 */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
419 switch (bar->menu) { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
420 case BATTLE_BAR_DEFAULT_MENU_ATTACK: |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
421 switch_selection_attack(bar, bt); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
422 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
423 case BATTLE_BAR_DEFAULT_MENU_ITEM: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
424 battle_bar_default_open_item(bar, bt); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
425 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
426 case BATTLE_BAR_DEFAULT_MENU_MAGIC: |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
427 battle_bar_default_open_magic(bar, bt, battle_current(bt)->ch); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
428 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
429 default: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
430 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
431 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
432 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
433 default: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
434 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
435 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
436 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
437 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
438 /* |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
439 * This function is called when we're selecting a submenu entry from Items |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
440 * and Magic. |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
441 */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
442 static void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
443 handle_keydown_grid(struct battle_bar_default *bar, struct battle *bt, const union event *ev) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
444 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
445 /* Go back to main menu if I press escape. */ |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
446 if (ev->key.key == KEY_ESCAPE) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
447 bar->state = BATTLE_BAR_DEFAULT_STATE_MENU; |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
448 else if (gridmenu_handle(&bar->grid, ev)) { |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
449 switch (bar->menu) { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
450 case BATTLE_BAR_DEFAULT_MENU_MAGIC: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
451 switch_selection_spell(bar, bt); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
452 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
453 case BATTLE_BAR_DEFAULT_MENU_ITEM: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
454 switch_selection_item(bt); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
455 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
456 default: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
457 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
458 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
459 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
460 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
461 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
462 static void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
463 handle_keydown(struct battle_bar_default *bar, struct battle *bt, const union event *ev) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
464 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
465 assert(ev->type == EVENT_KEYDOWN); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
466 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
467 static void (*handlers[])(struct battle_bar_default *, struct battle *, const union event *) = { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
468 [BATTLE_BAR_DEFAULT_STATE_MENU] = handle_keydown_menu, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
469 [BATTLE_BAR_DEFAULT_STATE_GRID] = handle_keydown_grid |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
470 }; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
471 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
472 if (handlers[bar->state]) |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
473 handlers[bar->state](bar, bt, ev); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
474 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
475 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
476 #if 0 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
477 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
478 static void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
479 handle_clickdown(struct battle_bar_default *bar, struct battle *bt, const union event *ev) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
480 { |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
481 assert(ev->type == EVENT_CLICKDOWN); |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
482 |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
483 (void)bar; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
484 (void)bt; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
485 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
486 switch (bar->state) { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
487 case BATTLE_BAR_DEFAULT_STATE_MENU: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
488 /* We are selecting a main menu entry. */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
489 /* TODO: implement click here too. */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
490 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
491 case BATTLE_BAR_DEFAULT_STATE_SUB: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
492 /* We are in the sub menu (objects/spells). */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
493 if (bar->sub_grid.state == GRIDMENU_STATE_ACTIVATED) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
494 default: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
495 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
496 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
497 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
498 return 0; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
499 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
500 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
501 #endif |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
502 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
503 static void |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
504 self_start(struct battle_bar *bar, struct battle *bt) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
505 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
506 (void)bt; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
507 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
508 battle_bar_default_start(bar->data); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
509 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
510 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
511 static void |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
386
diff
changeset
|
512 self_select(struct battle_bar *bar, struct battle *bt, const struct selection *sel) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
513 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
514 battle_bar_default_select(bar->data, bt, sel); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
515 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
516 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
517 static void |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
518 self_handle(struct battle_bar *bar, struct battle *bt, const union event *ev) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
519 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
520 battle_bar_default_handle(bar->data, bt, ev); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
521 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
522 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
523 static void |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
524 self_draw(const struct battle_bar *bar, const struct battle *bt) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
525 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
526 battle_bar_default_draw(bar->data, bt); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
527 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
528 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
529 void |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
530 battle_bar_default_init(struct battle_bar_default *bar) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
531 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
532 assert(bar); |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
533 |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
534 struct geo geo[2]; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
535 |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
536 memset(bar, 0, sizeof (*bar)); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
537 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
538 bar->w = window.w; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
539 bar->h = window.h * 0.12; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
540 bar->x = 0; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
541 bar->y = window.h - bar->h; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
542 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
543 dimensions(geo, bar); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
544 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
545 gridmenu_init(&bar->grid, 2, 2, NULL, 0); |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
546 gridmenu_resize(&bar->grid, bar->x, geo[0].y, geo[1].w, bar->h); |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
547 bar->grid.theme = bar->theme; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
548 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
549 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
550 void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
551 battle_bar_default_open_magic(struct battle_bar_default *bar, const struct battle *bt, struct character *ch) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
552 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
553 assert(bar); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
554 assert(bt); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
555 assert(ch); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
556 |
413
222045c513ec
misc: fix some warnings
David Demelier <markand@malikania.fr>
parents:
411
diff
changeset
|
557 (void)bt; |
222045c513ec
misc: fix some warnings
David Demelier <markand@malikania.fr>
parents:
411
diff
changeset
|
558 |
401
df5e1fea1d2e
ui: gridmenu should be fully constified
David Demelier <markand@malikania.fr>
parents:
398
diff
changeset
|
559 bar->items = alloc_rearray0(bar->items, bar->itemsz, |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
560 CHARACTER_SPELL_MAX, sizeof (*bar->items)); |
401
df5e1fea1d2e
ui: gridmenu should be fully constified
David Demelier <markand@malikania.fr>
parents:
398
diff
changeset
|
561 bar->itemsz = CHARACTER_SPELL_MAX; |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
562 bar->state = BATTLE_BAR_DEFAULT_STATE_GRID; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
563 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
564 for (size_t i = 0; i < CHARACTER_SPELL_MAX; ++i) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
565 if (ch->spells[i]) |
401
df5e1fea1d2e
ui: gridmenu should be fully constified
David Demelier <markand@malikania.fr>
parents:
398
diff
changeset
|
566 bar->items[i] = ch->spells[i]->name; |
df5e1fea1d2e
ui: gridmenu should be fully constified
David Demelier <markand@malikania.fr>
parents:
398
diff
changeset
|
567 |
df5e1fea1d2e
ui: gridmenu should be fully constified
David Demelier <markand@malikania.fr>
parents:
398
diff
changeset
|
568 bar->grid.items = bar->items; |
df5e1fea1d2e
ui: gridmenu should be fully constified
David Demelier <markand@malikania.fr>
parents:
398
diff
changeset
|
569 bar->grid.itemsz = bar->itemsz; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
570 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
571 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
572 void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
573 battle_bar_default_open_item(struct battle_bar_default *bar, const struct battle *bt) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
574 { |
386
7d5032755b7d
rpg: cleanup leftovers
David Demelier <markand@malikania.fr>
parents:
385
diff
changeset
|
575 assert(bar); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
576 assert(bt); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
577 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
578 /* TODO: not implemented yet. */ |
413
222045c513ec
misc: fix some warnings
David Demelier <markand@malikania.fr>
parents:
411
diff
changeset
|
579 (void)bar; |
222045c513ec
misc: fix some warnings
David Demelier <markand@malikania.fr>
parents:
411
diff
changeset
|
580 (void)bt; |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
386
diff
changeset
|
581 #if 0 |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
582 for (size_t i = 0; i < INVENTORY_ITEM_MAX; ++i) { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
583 if (bt->inventory->items[i].item) { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
584 snprintf(bar->sub_items[i], sizeof (bar->sub_items[i]), "%-16s %u", |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
585 bt->inventory->items[i].item->name, bt->inventory->items[i].amount); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
586 bar->sub_grid.menu[i] = bar->sub_items[i]; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
587 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
588 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
589 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
590 bar->state = BATTLE_BAR_DEFAULT_STATE_GRID; |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
386
diff
changeset
|
591 #endif |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
592 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
593 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
594 void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
595 battle_bar_default_start(struct battle_bar_default *bar) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
596 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
597 assert(bar); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
598 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
599 bar->menu = BATTLE_BAR_DEFAULT_MENU_ATTACK; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
600 bar->state = BATTLE_BAR_DEFAULT_STATE_MENU; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
601 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
602 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
603 /* |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
604 * Apply the battle selection for the current menu item. This function is called |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
605 * from the battle-state-selection state when the user validated the selection. |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
606 */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
607 void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
608 battle_bar_default_select(struct battle_bar_default *bar, struct battle *bt, const struct selection *sel) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
609 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
610 assert(bar); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
611 assert(bt); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
612 assert(sel); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
613 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
614 static void (*validate[])(struct battle_bar_default *, struct battle *, const struct selection *) = { |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
615 [BATTLE_BAR_DEFAULT_MENU_ATTACK] = validate_attack, |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
616 [BATTLE_BAR_DEFAULT_MENU_ITEM] = validate_item, |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
617 [BATTLE_BAR_DEFAULT_MENU_MAGIC] = validate_magic, |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
618 [BATTLE_BAR_DEFAULT_MENU_SPECIAL] = NULL |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
619 }; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
620 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
621 if (validate[bar->menu]) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
622 validate[bar->menu](bar, bt, sel); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
623 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
624 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
625 void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
626 battle_bar_default_handle(struct battle_bar_default *bar, struct battle *bt, const union event *ev) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
627 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
628 assert(bar); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
629 assert(bt); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
630 assert(ev); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
631 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
632 static void (*handlers[])(struct battle_bar_default *, struct battle *, const union event *) = { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
633 [EVENT_KEYDOWN] = handle_keydown, |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
634 [EVENT_NUM] = NULL |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
635 }; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
636 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
637 if (handlers[ev->type]) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
638 handlers[ev->type](bar, bt, ev); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
639 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
640 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
641 void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
642 battle_bar_default_draw(const struct battle_bar_default *bar, const struct battle *bt) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
643 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
644 assert(bar); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
645 assert(bt); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
646 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
647 struct geo geo[2]; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
648 |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
649 dimensions(geo, bar); |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
650 draw_menu(bar, &geo[0]); |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
651 draw_status(bar, bt, &geo[1]); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
652 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
653 if (bar->state == BATTLE_BAR_DEFAULT_STATE_GRID) { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
654 switch (bar->menu) { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
655 case BATTLE_BAR_DEFAULT_MENU_MAGIC: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
656 draw_spell_help(bar, bt); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
657 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
658 case BATTLE_BAR_DEFAULT_MENU_ITEM: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
659 draw_item_help(bar, bt); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
660 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
661 default: |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
662 break; |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
663 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
664 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
665 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
666 /* Sub menu is only shown if state is set to it. */ |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
667 if (bar->state == BATTLE_BAR_DEFAULT_STATE_GRID) |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
668 gridmenu_draw(&bar->grid); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
669 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
670 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
671 void |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
672 battle_bar_default_finish(struct battle_bar_default *bar) |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
673 { |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
674 assert(bar); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
675 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
676 free(bar->items); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
677 memset(bar, 0, sizeof (*bar)); |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
678 } |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
679 |
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
680 void |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
681 battle_bar_default(struct battle_bar_default *self, struct battle_bar *bar) |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
682 { |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
683 assert(self); |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
684 assert(bar); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
685 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
686 memset(bar, 0, sizeof (*bar)); |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
687 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
688 bar->data = self; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
689 bar->start = self_start; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
690 bar->select = self_select; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
691 bar->handle = self_handle; |
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
692 bar->draw = self_draw; |
385
3f13dc6c0e37
rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
693 } |