@@ -12,7 +12,7 @@ use server::resource_pile::ResourcePile;
12
12
13
13
use crate :: client_state:: { ShownPlayer , State , StateUpdate } ;
14
14
15
- pub fn show_globals ( game : & Game , shown_player : & ShownPlayer ) -> StateUpdate {
15
+ pub fn show_globals ( game : & Game , shown_player : & ShownPlayer , state : & State ) -> StateUpdate {
16
16
draw_text ( & format ! ( "Age {}" , game. age) , 1400. , 60. , 20. , BLACK ) ;
17
17
draw_text ( & format ! ( "Round {}" , game. round) , 1400. , 90. , 20. , BLACK ) ;
18
18
@@ -28,16 +28,12 @@ pub fn show_globals(game: &Game, shown_player: &ShownPlayer) -> StateUpdate {
28
28
let player = game. get_player ( p) ;
29
29
let shown = shown_player. index == p;
30
30
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) ;
36
32
let name = player. get_name ( ) ;
37
33
let y = 180. + i as f32 * 50. ;
38
34
let x = 1400. ;
39
35
let label = format ! ( "{prefix}{name}{suffix}" ) ;
40
- if shown {
36
+ if shown || state . has_modal_dialog ( ) {
41
37
draw_text ( & label, x, y, 20. , BLACK ) ;
42
38
} else if Button :: new ( label)
43
39
. position ( vec2 ( x, y - 10. ) )
@@ -53,44 +49,61 @@ fn player_suffix(game: &Game, player: &Player) -> String {
53
49
let actions_left = if game. current_player_index == player. index {
54
50
match & game. state {
55
51
GameState :: StatusPhase ( _) | GameState :: Finished => "" ,
56
- _ => & format ! ( ", {} actions Left" , game. actions_left) ,
52
+ _ => & format ! ( "{} actions Left" , game. actions_left) ,
57
53
}
58
54
} else {
59
55
""
60
56
} ;
57
+
61
58
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" ) ,
67
62
}
68
63
} else {
69
64
""
70
65
} ;
71
66
72
67
let active_player = if player. index == game. active_player ( ) {
73
68
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" ,
85
76
}
86
77
} else {
87
- String :: new ( )
78
+ ""
88
79
} ;
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 ( ) {
91
88
String :: new ( )
92
89
} 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 ,
94
107
}
95
108
}
96
109
0 commit comments