Skip to content

Commit 9d7ef53

Browse files
committed
refactor state change events
1 parent 44cd29c commit 9d7ef53

8 files changed

+36
-49
lines changed

client/src/client_state.rs

+14-23
Original file line numberDiff line numberDiff line change
@@ -180,14 +180,7 @@ impl ActiveDialog {
180180
ActiveDialog::WaitingForUpdate => vec!["Waiting for server update".to_string()],
181181
ActiveDialog::TradeRouteSelection(_) => vec!["Select trade route reward".to_string()],
182182
ActiveDialog::CustomPhasePaymentRequest(_r) => {
183-
match &rc
184-
.game
185-
.custom_phase_state
186-
.current
187-
.as_ref()
188-
.unwrap()
189-
.origin
190-
{
183+
match &rc.game.custom_phase_state.current.as_ref().unwrap().origin {
191184
EventOrigin::Advance(a) => advance_help(rc, a),
192185
_ => vec![], // TODO
193186
}
@@ -511,21 +504,19 @@ impl State {
511504
pub fn game_state_dialog(&self, game: &Game) -> ActiveDialog {
512505
if let Some(e) = &game.custom_phase_state.current {
513506
return match &e.request {
514-
CustomPhaseRequest::Payment(r) => {
515-
ActiveDialog::CustomPhasePaymentRequest(
516-
r.iter()
517-
.map(|p| {
518-
Payment::new(
519-
&p.model,
520-
&game.get_player(game.active_player()).resources,
521-
&p.name,
522-
p.optional,
523-
)
524-
})
525-
.collect(),
526-
)
527-
}
528-
}
507+
CustomPhaseRequest::Payment(r) => ActiveDialog::CustomPhasePaymentRequest(
508+
r.iter()
509+
.map(|p| {
510+
Payment::new(
511+
&p.model,
512+
&game.get_player(game.active_player()).resources,
513+
&p.name,
514+
p.optional,
515+
)
516+
})
517+
.collect(),
518+
),
519+
};
529520
}
530521
match &game.state {
531522
GameState::Playing | GameState::Finished => ActiveDialog::None,

client/src/combat_ui.rs

-1
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,3 @@ pub fn play_action_card_dialog(rc: &RenderContext) -> StateUpdate {
9292
}
9393
StateUpdate::None
9494
}
95-

server/src/ability_initializer.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::action::Action;
22
use crate::content::custom_phase_actions::{
3-
CustomPhaseEvent, CustomPhaseEventAction, CustomPhaseEventType,
4-
CustomPhasePaymentRequest, CustomPhaseRequest,
3+
CustomPhaseEvent, CustomPhaseEventAction, CustomPhaseEventType, CustomPhasePaymentRequest,
4+
CustomPhaseRequest,
55
};
66
use crate::resource_pile::ResourcePile;
77
use crate::{
@@ -90,7 +90,9 @@ pub(crate) trait AbilityInitializerSetup: Sized {
9090
+ Clone,
9191
) -> Self
9292
where
93-
E: Fn(&mut PlayerEvents) -> &mut EventMut<Game, usize, CustomPhaseEventType> + 'static + Clone,
93+
E: Fn(&mut PlayerEvents) -> &mut EventMut<Game, usize, CustomPhaseEventType>
94+
+ 'static
95+
+ Clone,
9496
{
9597
let origin = self.get_key();
9698
self.add_player_event_listener(
@@ -138,7 +140,7 @@ pub(crate) trait AbilityInitializerSetup: Sized {
138140
)
139141
}
140142

141-
#[allow(irrefutable_let_patterns)]
143+
#[allow(irrefutable_let_patterns)]
142144
fn add_payment_request_listener<E>(
143145
self,
144146
event: E,
@@ -147,7 +149,9 @@ pub(crate) trait AbilityInitializerSetup: Sized {
147149
gain_reward: impl Fn(&mut Game, usize, &str, &Vec<ResourcePile>) + 'static + Clone,
148150
) -> Self
149151
where
150-
E: Fn(&mut PlayerEvents) -> &mut EventMut<Game, usize, CustomPhaseEventType> + 'static + Clone,
152+
E: Fn(&mut PlayerEvents) -> &mut EventMut<Game, usize, CustomPhaseEventType>
153+
+ 'static
154+
+ Clone,
151155
{
152156
self.add_state_change_event_listener(
153157
event,

server/src/combat.rs

+7-12
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,7 @@ pub fn initiate_combat(
155155
start_combat(game, combat);
156156
}
157157

158-
pub(crate) fn start_combat(
159-
game: &mut Game,
160-
combat: Combat,
161-
) {
158+
pub(crate) fn start_combat(game: &mut Game, combat: Combat) {
162159
game.lock_undo();
163160
let attacker = combat.attacker;
164161
let defender = combat.defender;
@@ -171,16 +168,14 @@ pub(crate) fn start_combat(
171168
attacker,
172169
|events| &events.on_combat_start,
173170
CustomPhaseEventType::StartCombatAttacker,
174-
) {
171+
) {
175172
return;
176173
}
177-
if
178-
game.trigger_custom_phase_event(
179-
defender,
180-
|events| &events.on_combat_start,
181-
CustomPhaseEventType::StartCombatDefender,
182-
)
183-
{
174+
if game.trigger_custom_phase_event(
175+
defender,
176+
|events| &events.on_combat_start,
177+
CustomPhaseEventType::StartCombatDefender,
178+
) {
184179
return;
185180
}
186181

server/src/content/advances.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::city_pieces::Building::{Academy, Fortress, Market, Obelisk, Observato
55
use crate::collect::CollectContext;
66
use crate::combat::CombatModifier::*;
77
use crate::combat::{Combat, CombatModifier, CombatStrength};
8-
use crate::content::custom_phase_actions::{CustomPhaseEventType, CustomPhasePaymentRequest};
8+
use crate::content::custom_phase_actions::CustomPhasePaymentRequest;
99
use crate::content::trade_routes::collect_trade_routes_for_current_player;
1010
use crate::game::GameState;
1111
use crate::payment::PaymentModel;

server/src/content/custom_phase_actions.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ pub enum CustomPhaseEventType {
2222
impl CustomPhaseEventType {
2323
#[must_use]
2424
pub fn is_last_type_for_event(&self) -> bool {
25-
#[allow(clippy::match_like_matches_macro)]
25+
#[allow(clippy::match_like_matches_macro, clippy::match_wildcard_for_single_variants)]
2626
match self {
2727
CustomPhaseEventType::StartCombatAttacker => false,
2828
_ => true,
@@ -94,14 +94,13 @@ impl CustomPhaseAction {
9494
match &game.state {
9595
GameState::CustomPhase(state) => match state {
9696
CustomPhaseState::TradeRouteSelection => {
97+
#[allow(irrefutable_let_patterns)]
9798
if let CustomPhaseAction::TradeRouteSelectionAction(p) = self {
9899
let (reward, routes) =
99100
trade_route_reward(game).expect("No trade route reward");
100101
assert!(reward.is_valid_payment(&p), "Invalid payment"); // it's a gain
101102
gain_trade_route_reward(game, player_index, &routes, &p);
102103
game.state = GameState::Playing;
103-
} else {
104-
panic!("Need to pass TradeRouteSelectionAction to execute");
105104
}
106105
}
107106
},

server/src/game.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::advance::Advance;
88
use crate::combat::{self, start_combat, Combat, CombatDieRoll, CombatPhase, COMBAT_DIE_SIDES};
99
use crate::consts::{ACTIONS, MOVEMENT_ACTIONS};
1010
use crate::content::custom_phase_actions::{
11-
CustomPhaseEvent, CustomPhaseEventAction, CustomPhaseEventState, CustomPhaseEventType,
11+
CustomPhaseEventState, CustomPhaseEventType,
1212
CustomPhaseState,
1313
};
1414
use crate::events::EventMut;
@@ -1869,6 +1869,7 @@ pub mod tests {
18691869
use std::collections::HashMap;
18701870

18711871
use super::{Game, GameState::Playing};
1872+
use crate::content::custom_phase_actions::CustomPhaseEventState;
18721873
use crate::payment::PaymentModel;
18731874
use crate::utils::tests::FloatEq;
18741875
use crate::{
@@ -1881,7 +1882,6 @@ pub mod tests {
18811882
utils::Rng,
18821883
wonder::Wonder,
18831884
};
1884-
use crate::content::custom_phase_actions::CustomPhaseEventState;
18851885

18861886
#[must_use]
18871887
pub fn test_game() -> Game {
@@ -1912,7 +1912,6 @@ pub mod tests {
19121912
wonders_left: Vec::new(),
19131913
wonder_amount_left: 0,
19141914
undo_context_stack: Vec::new(),
1915-
19161915
}
19171916
}
19181917

server/src/player_events.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use crate::action::Action;
22
use crate::collect::CollectContext;
33
use crate::combat::{Combat, CombatStrength};
4+
use crate::content::custom_phase_actions::CustomPhaseEventType;
45
use crate::game::Game;
56
use crate::map::Terrain;
67
use crate::payment::PaymentModel;
@@ -10,7 +11,6 @@ use crate::{
1011
resource_pile::ResourcePile, wonder::Wonder,
1112
};
1213
use std::collections::{HashMap, HashSet};
13-
use crate::content::custom_phase_actions::CustomPhaseEventType;
1414

1515
#[derive(Default)]
1616
pub(crate) struct PlayerEvents {

0 commit comments

Comments
 (0)