Skip to content

Commit 6d6462a

Browse files
committed
buttons on top
1 parent fe5031d commit 6d6462a

File tree

2 files changed

+114
-140
lines changed

2 files changed

+114
-140
lines changed

client/src/dialog_ui.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::client_state::{PendingUpdate, ShownPlayer, State, StateUpdate};
1+
use crate::client_state::{PendingUpdate, ShownPlayer, StateUpdate};
22
use macroquad::hash;
33
use macroquad::math::{vec2, Vec2};
44
use macroquad::prelude::screen_height;

client/src/player_ui.rs

+113-139
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,52 @@
11
use crate::client::Features;
22
use crate::client_state::{
3-
ActiveDialog, ShownPlayer, State, StateUpdate, StateUpdates, OFFSET, ZOOM,
3+
ActiveDialog, ShownPlayer, State, StateUpdate, OFFSET, ZOOM,
44
};
5-
use crate::dialog_ui::show_window;
65
use crate::happiness_ui::start_increase_happiness;
7-
use macroquad::hash;
86
use macroquad::math::vec2;
97
use macroquad::prelude::*;
10-
use macroquad::ui::widgets::Window;
11-
use macroquad::ui::Ui;
8+
use macroquad::ui::{root_ui, Ui};
129
use server::action::Action;
1310
use server::game::{Game, GameState};
1411
use server::player::Player;
1512
use server::playing_actions::PlayingAction;
1613
use server::resource_pile::ResourcePile;
1714

1815
pub fn show_globals(game: &Game, player: &ShownPlayer) -> StateUpdate {
19-
let y = 0.;
20-
let width = screen_width() - 20.;
21-
let window = Window::new(hash!(), vec2(10., 5.), vec2(width, 20.))
22-
.titlebar(false)
23-
.movable(false)
24-
.close_button(false);
16+
let y = 5.;
2517

26-
let mut updates = StateUpdates::new();
27-
let (update, _open) = show_window(window, |ui| {
28-
ui.label(vec2(10., y), &format!("Age {}", game.age));
29-
ui.label(vec2(40., y), &format!("Round {}", game.round));
18+
let ui = &mut root_ui();
19+
ui.label(vec2(10., y), &format!("Age {}", game.age));
20+
ui.label(vec2(45., y), &format!("Round {}", game.round));
3021

31-
show_player_status(game, player, ui);
32-
show_wonders(game, player, ui);
33-
StateUpdate::None
34-
});
22+
show_player_status(game, player, ui);
23+
show_wonders(game, player, ui);
3524

36-
updates.add(update);
37-
let window = Window::new(hash!(), vec2(10., 50.), vec2(width, 20.))
38-
.titlebar(false)
39-
.movable(false)
40-
.close_button(false);
41-
let (update, _open) = show_window(window, |ui| {
42-
let i = game
43-
.players
44-
.iter()
45-
.position(|p| p.index == game.starting_player_index)
46-
.unwrap();
47-
let mut players: Vec<_> = game.players.iter().map(|p| p.index).collect();
48-
players.rotate_left(i);
25+
let y = 50.;
4926

50-
for (i, &p) in players.iter().enumerate() {
51-
let p = game.get_player(p);
52-
let shown = player.index == p.index;
53-
let prefix = if shown { "* " } else { "" };
54-
let suffix = &player_suffix(game, p);
55-
let name = p.get_name();
56-
let y = 0.;
57-
let x = i as f32 * 500.;
58-
let label = format!("{prefix}{name}{suffix}");
59-
if shown {
60-
ui.label(vec2(x, y), &label);
61-
} else if ui.button(vec2(x, y), label) {
62-
return StateUpdate::SetShownPlayer(p.index);
63-
}
27+
let i = game
28+
.players
29+
.iter()
30+
.position(|p| p.index == game.starting_player_index)
31+
.unwrap();
32+
let mut players: Vec<_> = game.players.iter().map(|p| p.index).collect();
33+
players.rotate_left(i);
34+
35+
for (i, &p) in players.iter().enumerate() {
36+
let p = game.get_player(p);
37+
let shown = player.index == p.index;
38+
let prefix = if shown { "* " } else { "" };
39+
let suffix = &player_suffix(game, p);
40+
let name = p.get_name();
41+
let x = i as f32 * 500.;
42+
let label = format!("{prefix}{name}{suffix}");
43+
if shown {
44+
ui.label(vec2(x, y), &label);
45+
} else if ui.button(vec2(x, y), label) {
46+
return StateUpdate::SetShownPlayer(p.index);
6447
}
65-
StateUpdate::None
66-
});
67-
updates.add(update);
68-
updates.result()
48+
}
49+
StateUpdate::None
6950
}
7051

7152
fn player_suffix(game: &Game, player: &Player) -> String {
@@ -132,16 +113,17 @@ fn moves_left(state: &GameState) -> Option<u32> {
132113

133114
pub fn show_wonders(game: &Game, player: &ShownPlayer, ui: &mut Ui) {
134115
let player = game.get_player(player.index);
116+
let y = 5.;
135117
for (i, name) in player.wonders.iter().enumerate() {
136-
ui.label(vec2(500. + i as f32 * 30.0, 0.), &format!("Wonder {name}"));
118+
ui.label(vec2(500. + i as f32 * 30.0, y), &format!("Wonder {name}"));
137119
}
138120
for (i, card) in player.wonder_cards.iter().enumerate() {
139121
let req = match card.required_advances[..] {
140122
[] => String::from("no advances"),
141123
_ => card.required_advances.join(", "),
142124
};
143125
ui.label(
144-
vec2(900. + i as f32 * 30.0, 0.),
126+
vec2(900. + i as f32 * 30.0, y),
145127
&format!(
146128
"Wonder Card {} cost {} requires {}",
147129
&card.name, card.cost, req
@@ -154,7 +136,7 @@ pub fn show_player_status(game: &Game, player: &ShownPlayer, ui: &mut Ui) {
154136
let player = game.get_player(player.index);
155137
let mut i: f32 = 0.;
156138
let mut res = |label: String| {
157-
ui.label(vec2(110. + i, 0.), &label);
139+
ui.label(vec2(110. + i, 5.), &label);
158140
i += 70.;
159141
};
160142

@@ -186,97 +168,89 @@ fn resource_ui(player: &Player, name: &str, f: impl Fn(&ResourcePile) -> u32) ->
186168

187169
pub fn show_global_controls(game: &Game, state: &mut State, features: &Features) -> StateUpdate {
188170
let player = state.shown_player(game);
189-
let y = 0.;
190-
let width = screen_width() - 20.;
191-
let window = Window::new(hash!(), vec2(10., 30.), vec2(width, 20.))
192-
.titlebar(false)
193-
.movable(false)
194-
.close_button(false);
171+
let y = 30.;
195172

196-
let (update, _open) = show_window(window, |ui| {
197-
if ui.button(vec2(10., y), "+") {
198-
state.zoom *= 1.1;
199-
return StateUpdate::None;
200-
}
201-
if ui.button(vec2(25., y), "-") {
202-
state.zoom /= 1.1;
203-
return StateUpdate::None;
204-
}
205-
if ui.button(vec2(40., y), "Reset") {
206-
state.zoom = ZOOM;
207-
state.offset = OFFSET;
208-
return StateUpdate::None;
209-
}
210-
if ui.button(vec2(100., y), "L") {
211-
state.offset += vec2(-0.1, 0.);
212-
return StateUpdate::None;
213-
}
214-
if ui.button(vec2(120., y), "R") {
215-
state.offset += vec2(0.1, 0.);
216-
return StateUpdate::None;
217-
}
218-
if ui.button(vec2(140., y), "U") {
219-
state.offset += vec2(0., 0.1);
220-
return StateUpdate::None;
221-
}
222-
if ui.button(vec2(160., y), "D") {
223-
state.offset += vec2(0., -0.1);
224-
return StateUpdate::None;
225-
}
173+
let ui = &mut root_ui();
174+
if ui.button(vec2(10., y), "+") {
175+
state.zoom *= 1.1;
176+
return StateUpdate::None;
177+
}
178+
if ui.button(vec2(25., y), "-") {
179+
state.zoom /= 1.1;
180+
return StateUpdate::None;
181+
}
182+
if ui.button(vec2(40., y), "Reset") {
183+
state.zoom = ZOOM;
184+
state.offset = OFFSET;
185+
return StateUpdate::None;
186+
}
187+
if ui.button(vec2(100., y), "L") {
188+
state.offset += vec2(-0.1, 0.);
189+
return StateUpdate::None;
190+
}
191+
if ui.button(vec2(120., y), "R") {
192+
state.offset += vec2(0.1, 0.);
193+
return StateUpdate::None;
194+
}
195+
if ui.button(vec2(140., y), "U") {
196+
state.offset += vec2(0., 0.1);
197+
return StateUpdate::None;
198+
}
199+
if ui.button(vec2(160., y), "D") {
200+
state.offset += vec2(0., -0.1);
201+
return StateUpdate::None;
202+
}
226203

227-
if game.can_undo() && ui.button(vec2(180., y), "Undo") {
228-
return StateUpdate::Execute(Action::Undo);
229-
}
230-
// todo close active dialog button
231-
if game.can_redo() && ui.button(vec2(220., y), "Redo") {
232-
return StateUpdate::Execute(Action::Redo);
233-
}
234-
if player.can_control
235-
&& matches!(game.state, GameState::Playing)
236-
&& ui.button(vec2(270., y), "End Turn")
237-
{
238-
let left = game.actions_left;
239-
return StateUpdate::execute_with_warning(
240-
Action::Playing(PlayingAction::EndTurn),
241-
if left > 0 {
242-
vec![format!("{left} actions left")]
243-
} else {
244-
vec![]
245-
},
246-
);
247-
}
204+
if game.can_undo() && ui.button(vec2(180., y), "Undo") {
205+
return StateUpdate::Execute(Action::Undo);
206+
}
207+
if game.can_redo() && ui.button(vec2(220., y), "Redo") {
208+
return StateUpdate::Execute(Action::Redo);
209+
}
210+
if player.can_control
211+
&& matches!(game.state, GameState::Playing)
212+
&& ui.button(vec2(270., y), "End Turn")
213+
{
214+
let left = game.actions_left;
215+
return StateUpdate::execute_with_warning(
216+
Action::Playing(PlayingAction::EndTurn),
217+
if left > 0 {
218+
vec![format!("{left} actions left")]
219+
} else {
220+
vec![]
221+
},
222+
);
223+
}
248224

249-
if player.can_play_action && ui.button(vec2(340., y), "Move") {
250-
return StateUpdate::execute(Action::Playing(PlayingAction::MoveUnits));
251-
}
252-
if player.can_play_action && ui.button(vec2(390., y), "Happiness") {
253-
return start_increase_happiness(game, &player);
254-
}
255-
if ui.button(vec2(490., y), "Advances") {
256-
return StateUpdate::OpenDialog(ActiveDialog::AdvanceMenu);
225+
if player.can_play_action && ui.button(vec2(340., y), "Move") {
226+
return StateUpdate::execute(Action::Playing(PlayingAction::MoveUnits));
227+
}
228+
if player.can_play_action && ui.button(vec2(390., y), "Happiness") {
229+
return start_increase_happiness(game, &player);
230+
}
231+
if ui.button(vec2(490., y), "Advances") {
232+
return StateUpdate::OpenDialog(ActiveDialog::AdvanceMenu);
233+
};
234+
if ui.button(vec2(560., y), "Log") {
235+
return StateUpdate::OpenDialog(ActiveDialog::Log);
236+
};
237+
let d = state.game_state_dialog(game, &ActiveDialog::None);
238+
if !matches!(d, ActiveDialog::None)
239+
&& d.title() != state.active_dialog.title()
240+
&& ui.button(vec2(600., y), format!("Back to {}", d.title()))
241+
{
242+
return StateUpdate::OpenDialog(d);
243+
}
244+
245+
if features.import_export {
246+
if ui.button(vec2(1000., y), "Import") {
247+
return StateUpdate::Import;
257248
};
258-
if ui.button(vec2(560., y), "Log") {
259-
return StateUpdate::OpenDialog(ActiveDialog::Log);
249+
if ui.button(vec2(1100., y), "Export") {
250+
return StateUpdate::Export;
260251
};
261-
let d = state.game_state_dialog(game, &ActiveDialog::None);
262-
if !matches!(d, ActiveDialog::None)
263-
&& d.title() != state.active_dialog.title()
264-
&& ui.button(vec2(600., y), format!("Back to {}", d.title()))
265-
{
266-
return StateUpdate::OpenDialog(d);
267-
}
268-
269-
if features.import_export {
270-
if ui.button(vec2(1000., y), "Import") {
271-
return StateUpdate::Import;
272-
};
273-
if ui.button(vec2(1100., y), "Export") {
274-
return StateUpdate::Export;
275-
};
276-
}
277-
StateUpdate::None
278-
});
279-
update
252+
}
253+
StateUpdate::None
280254
}
281255

282256
pub fn player_color(player_index: usize) -> Color {

0 commit comments

Comments
 (0)