Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 3c56993

Browse files
committedSep 29, 2024·
fix movement
1 parent d9f7584 commit 3c56993

File tree

5 files changed

+61
-49
lines changed

5 files changed

+61
-49
lines changed
 

‎client/src/client.rs

+14-12
Original file line numberDiff line numberDiff line change
@@ -54,24 +54,26 @@ fn render(game: &Game, state: &State, features: &Features) -> StateUpdate {
5454

5555
draw_map(game, state);
5656
let mut updates = StateUpdates::new();
57-
let update = show_globals(game, player);
57+
let update = show_globals(game, player, state);
5858
updates.add(update);
5959
show_resources(game, player_index);
6060
show_wonders(game, player_index);
6161

62-
if root_ui().button(vec2(1200., 130.), "Log") {
63-
return StateUpdate::OpenDialog(ActiveDialog::Log);
64-
};
65-
if root_ui().button(vec2(1200., 100.), "Advances") {
66-
return StateUpdate::OpenDialog(ActiveDialog::AdvanceMenu);
67-
};
68-
if features.import_export && player.can_control {
69-
if root_ui().button(vec2(1200., 290.), "Import") {
70-
return StateUpdate::Import;
62+
if !state.has_modal_dialog() {
63+
if root_ui().button(vec2(1200., 130.), "Log") {
64+
return StateUpdate::OpenDialog(ActiveDialog::Log);
7165
};
72-
if root_ui().button(vec2(1250., 290.), "Export") {
73-
return StateUpdate::Export;
66+
if root_ui().button(vec2(1200., 100.), "Advances") {
67+
return StateUpdate::OpenDialog(ActiveDialog::AdvanceMenu);
7468
};
69+
if features.import_export && player.can_control {
70+
if root_ui().button(vec2(1200., 290.), "Import") {
71+
return StateUpdate::Import;
72+
};
73+
if root_ui().button(vec2(1250., 290.), "Export") {
74+
return StateUpdate::Export;
75+
};
76+
}
7577
}
7678

7779
if player.can_control {

‎client/src/client_state.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use macroquad::input::KeyCode::N;
21
use macroquad::prelude::*;
32

43
use server::action::{Action, CombatAction};
@@ -209,9 +208,7 @@ impl State {
209208
pub fn has_modal_dialog(&self) -> bool {
210209
!matches!(
211210
self.active_dialog,
212-
ActiveDialog::None |
213-
ActiveDialog::TileMenu(_) |
214-
ActiveDialog::Log
211+
ActiveDialog::None | ActiveDialog::TileMenu(_) | ActiveDialog::Log
215212
)
216213
}
217214

‎client/src/local_client.rs

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use std::io::BufReader;
88
use crate::client::{Features, GameSyncRequest, GameSyncResult};
99
use server::city::City;
1010
use server::game::{Game, GameData};
11+
use server::leader::Leader;
1112
use server::map::Terrain;
1213
use server::position::Position;
1314
use server::resource_pile::ResourcePile;
@@ -88,6 +89,8 @@ pub fn setup_local_game() -> Game {
8889
add_unit(&mut game, "C2", player_index1, UnitType::Settler);
8990
add_unit(&mut game, "C2", player_index1, UnitType::Settler);
9091
add_unit(&mut game, "C2", player_index1, UnitType::Settler);
92+
game.players[player_index1].active_leader =
93+
Some(Leader::builder("Alexander", "", "", "", "").build());
9194

9295
add_unit(&mut game, "C1", player_index2, UnitType::Infantry);
9396
add_unit(&mut game, "C1", player_index2, UnitType::Infantry);

‎client/src/move_ui.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ use macroquad::math::u32;
22

33
use crate::select_ui::{ConfirmSelection, SelectionConfirm};
44
use server::action::Action;
5+
use server::game::Game;
56
use server::game::GameState::Movement;
6-
use server::game::{Game, GameState};
77
use server::position::Position;
88
use server::unit::{MovementAction, Unit};
99

@@ -28,10 +28,7 @@ pub fn move_units_dialog(game: &Game, sel: &MoveSelection, player: &ShownPlayer)
2828
panic!("game is not in movement")
2929
};
3030

31-
if ui.button(
32-
None,
33-
"End Move Units",
34-
) {
31+
if ui.button(None, "End Move Units") {
3532
StateUpdate::execute_with_warning(
3633
Action::Movement(MovementAction::Stop),
3734
if movement_actions_left > 0 {

‎client/src/player_ui.rs

+41-28
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use server::resource_pile::ResourcePile;
1212

1313
use crate::client_state::{ShownPlayer, State, StateUpdate};
1414

15-
pub fn show_globals(game: &Game, shown_player: &ShownPlayer) -> StateUpdate {
15+
pub fn show_globals(game: &Game, shown_player: &ShownPlayer, state: &State) -> StateUpdate {
1616
draw_text(&format!("Age {}", game.age), 1400., 60., 20., BLACK);
1717
draw_text(&format!("Round {}", game.round), 1400., 90., 20., BLACK);
1818

@@ -28,16 +28,12 @@ pub fn show_globals(game: &Game, shown_player: &ShownPlayer) -> StateUpdate {
2828
let player = game.get_player(p);
2929
let shown = shown_player.index == p;
3030
let prefix = if shown { "* " } else { "" };
31-
let suffix = if p == game.active_player() {
32-
&player_suffix(game, player)
33-
} else {
34-
""
35-
};
31+
let suffix = &player_suffix(game, player);
3632
let name = player.get_name();
3733
let y = 180. + i as f32 * 50.;
3834
let x = 1400.;
3935
let label = format!("{prefix}{name}{suffix}");
40-
if shown {
36+
if shown || state.has_modal_dialog() {
4137
draw_text(&label, x, y, 20., BLACK);
4238
} else if Button::new(label)
4339
.position(vec2(x, y - 10.))
@@ -53,44 +49,61 @@ fn player_suffix(game: &Game, player: &Player) -> String {
5349
let actions_left = if game.current_player_index == player.index {
5450
match &game.state {
5551
GameState::StatusPhase(_) | GameState::Finished => "",
56-
_ => &format!(", {} actions Left", game.actions_left),
52+
_ => &format!("{} actions Left", game.actions_left),
5753
}
5854
} else {
5955
""
6056
};
57+
6158
let moves_left = if game.current_player_index == player.index {
62-
match &game.state {
63-
GameState::Movement { movement_actions_left, .. } => {
64-
&format!(", {movement_actions_left} moves left")
65-
}
66-
_ => "",
59+
match moves_left(&game.state) {
60+
None => "",
61+
Some(m) => &format!("{m} moves left"),
6762
}
6863
} else {
6964
""
7065
};
7166

7267
let active_player = if player.index == game.active_player() {
7368
match &game.state {
74-
GameState::Playing => String::from("Play Actions"),
75-
GameState::StatusPhase(ref p) => format!("Status Phase: {p:?}"),
76-
GameState::Movement { .. } => String::from("Movement"),
77-
GameState::CulturalInfluenceResolution(_) => {
78-
String::from("Cultural Influence Resolution")
79-
}
80-
GameState::Combat(c) => {
81-
format!("Combat Round {} Phase {:?}", c.round, c.phase)
82-
}
83-
GameState::PlaceSettler { .. } => String::from("Place Settler"),
84-
GameState::Finished => String::from("Finished"),
69+
GameState::Playing => "Play Actions",
70+
GameState::StatusPhase(ref p) => &format!("Status Phase: {p:?}"),
71+
GameState::Movement { .. } => "Movement",
72+
GameState::CulturalInfluenceResolution(_) => "Cultural Influence Resolution",
73+
GameState::Combat(c) => &format!("Combat Round {} Phase {:?}", c.round, c.phase),
74+
GameState::PlaceSettler { .. } => "Place Settler",
75+
GameState::Finished => "Finished",
8576
}
8677
} else {
87-
String::new()
78+
""
8879
};
89-
90-
if actions_left.is_empty() && active_player.is_empty() {
80+
81+
let status = vec![active_player, actions_left, moves_left]
82+
.into_iter()
83+
.filter(|s| !s.is_empty())
84+
.collect::<Vec<_>>()
85+
.join(", ");
86+
87+
if status.is_empty() {
9188
String::new()
9289
} else {
93-
format!(" ({active_player}{actions_left}{moves_left})")
90+
format!(" ({status})")
91+
}
92+
}
93+
94+
fn moves_left(state: &GameState) -> Option<u32> {
95+
match state {
96+
GameState::Combat(c) => moves_left(&c.initiation),
97+
GameState::Movement {
98+
movement_actions_left,
99+
..
100+
} => Some(*movement_actions_left),
101+
GameState::PlaceSettler {
102+
player_index: _player_index,
103+
movement_actions_left,
104+
..
105+
} => Some(*movement_actions_left),
106+
_ => None,
94107
}
95108
}
96109

0 commit comments

Comments
 (0)
Please sign in to comment.