Skip to content

Commit 31a0e6a

Browse files
authored
last part of barbarians (#165)
1 parent 020412b commit 31a0e6a

File tree

88 files changed

+4370
-2177
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+4370
-2177
lines changed

client/src/client.rs

+13-19
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ use crate::render_context::RenderContext;
2525
use crate::status_phase_ui::raze_city_confirm_dialog;
2626
use crate::unit_ui::unit_selection_click;
2727
use crate::{
28-
combat_ui, custom_actions_ui, custom_phase_ui, dialog_ui, influence_ui, map_ui, move_ui,
29-
recruit_unit_ui, status_phase_ui, tooltip,
28+
custom_actions_ui, custom_phase_ui, dialog_ui, influence_ui, map_ui, move_ui, recruit_unit_ui,
29+
status_phase_ui, tooltip,
3030
};
3131

3232
fn render_with_mutable_state(game: &Game, state: &mut State, features: &Features) -> StateUpdate {
@@ -131,7 +131,7 @@ fn render_active_dialog(rc: &RenderContext) -> StateUpdate {
131131
ActiveDialog::None
132132
| ActiveDialog::WaitingForUpdate
133133
| ActiveDialog::CulturalInfluence(_)
134-
| ActiveDialog::CustomPhasePositionRequest(_) => StateUpdate::None,
134+
| ActiveDialog::PositionRequest(_) => StateUpdate::None,
135135
ActiveDialog::DialogChooser(d) => dialog_chooser(rc, d),
136136
ActiveDialog::Log => show_log(rc),
137137

@@ -159,25 +159,19 @@ fn render_active_dialog(rc: &RenderContext) -> StateUpdate {
159159
status_phase_ui::choose_additional_advances_dialog(rc, a)
160160
}
161161
ActiveDialog::DetermineFirstPlayer => status_phase_ui::determine_first_player_dialog(rc),
162-
//combat
163-
ActiveDialog::PlayActionCard => combat_ui::play_action_card_dialog(rc),
164-
ActiveDialog::Retreat => combat_ui::retreat_dialog(rc),
165-
ActiveDialog::RemoveCasualties(s) => combat_ui::remove_casualties_dialog(rc, s),
166162

167163
ActiveDialog::Sports((p, pos)) => custom_actions_ui::sports(rc, p, *pos),
168164
ActiveDialog::Taxes(p) => custom_actions_ui::taxes(rc, p),
169165
ActiveDialog::Theaters(p) => custom_actions_ui::theaters(rc, p),
170166

171-
ActiveDialog::CustomPhasePaymentRequest(c) => {
172-
custom_phase_ui::custom_phase_payment_dialog(rc, c)
173-
}
174-
ActiveDialog::CustomPhaseResourceRewardRequest(p) => {
175-
custom_phase_ui::payment_reward_dialog(rc, p)
176-
}
177-
ActiveDialog::CustomPhaseAdvanceRewardRequest(r) => {
167+
ActiveDialog::PaymentRequest(c) => custom_phase_ui::custom_phase_payment_dialog(rc, c),
168+
ActiveDialog::ResourceRewardRequest(p) => custom_phase_ui::payment_reward_dialog(rc, p),
169+
ActiveDialog::AdvanceRewardRequest(r) => {
178170
custom_phase_ui::advance_reward_dialog(rc, r, &custom_phase_event_origin(rc).name())
179171
}
180-
ActiveDialog::CustomPhaseUnitRequest(r) => custom_phase_ui::unit_request_dialog(rc, r),
172+
ActiveDialog::UnitTypeRequest(r) => custom_phase_ui::unit_request_dialog(rc, r),
173+
ActiveDialog::UnitsRequest(r) => custom_phase_ui::select_units_dialog(rc, r),
174+
ActiveDialog::BoolRequest => custom_phase_ui::bool_request_dialog(rc),
181175
}
182176
}
183177

@@ -225,14 +219,11 @@ fn controlling_player_click(rc: &RenderContext, mouse_pos: Vec2, pos: Position)
225219
match &rc.state.active_dialog {
226220
ActiveDialog::CollectResources(_) => StateUpdate::None,
227221
ActiveDialog::MoveUnits(s) => move_ui::click(rc, pos, s, mouse_pos),
228-
ActiveDialog::RemoveCasualties(s) => unit_selection_click(rc, pos, mouse_pos, s, |new| {
229-
StateUpdate::OpenDialog(ActiveDialog::RemoveCasualties(new.clone()))
230-
}),
231222
ActiveDialog::ReplaceUnits(s) => unit_selection_click(rc, pos, mouse_pos, s, |new| {
232223
StateUpdate::OpenDialog(ActiveDialog::ReplaceUnits(new.clone()))
233224
}),
234225
ActiveDialog::RazeSize1City => raze_city_confirm_dialog(rc, pos),
235-
ActiveDialog::CustomPhasePositionRequest(r) => {
226+
ActiveDialog::PositionRequest(r) => {
236227
if r.choices.contains(&pos) {
237228
StateUpdate::Execute(Action::CustomPhaseEvent(
238229
CustomPhaseEventAction::SelectPosition(pos),
@@ -241,6 +232,9 @@ fn controlling_player_click(rc: &RenderContext, mouse_pos: Vec2, pos: Position)
241232
StateUpdate::None
242233
}
243234
}
235+
ActiveDialog::UnitsRequest(s) => unit_selection_click(rc, pos, mouse_pos, s, |new| {
236+
StateUpdate::OpenDialog(ActiveDialog::UnitsRequest(new.clone()))
237+
}),
244238
ActiveDialog::IncreaseHappiness(h) => increase_happiness_click(rc, pos, h),
245239
_ => StateUpdate::SetFocusedTile(pos),
246240
}

client/src/client_state.rs

+35-88
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use crate::assets::Assets;
22
use crate::client::{Features, GameSyncRequest};
33
use crate::collect_ui::CollectResources;
4-
use crate::combat_ui::RemoveCasualtiesSelection;
54
use crate::construct_ui::ConstructionPayment;
5+
use crate::custom_phase_ui::UnitsSelection;
66
use crate::dialog_ui::{BaseOrCustomAction, BaseOrCustomDialog};
77
use crate::event_ui::{custom_phase_event_help, event_help, pay_help};
88
use crate::happiness_ui::IncreaseHappinessConfig;
@@ -16,16 +16,13 @@ use crate::status_phase_ui::ChooseAdditionalAdvances;
1616
use macroquad::prelude::*;
1717
use server::action::Action;
1818
use server::city::{City, MoodState};
19-
use server::combat::{active_attackers, active_defenders, CombatPhase};
2019
use server::content::custom_phase_actions::{
21-
CustomPhaseAdvanceRewardRequest, CustomPhasePositionRequest, CustomPhaseRequest,
22-
CustomPhaseUnitRequest,
20+
AdvanceRewardRequest, CustomPhaseRequest, PositionRequest, UnitTypeRequest,
2321
};
2422
use server::events::EventOrigin;
2523
use server::game::{CulturalInfluenceResolution, CurrentMove, Game, GameState};
2624
use server::position::Position;
2725
use server::status_phase::{StatusPhaseAction, StatusPhaseState};
28-
use server::unit::carried_units;
2926

3027
#[derive(Clone)]
3128
pub enum ActiveDialog {
@@ -56,20 +53,17 @@ pub enum ActiveDialog {
5653
ChangeGovernmentType,
5754
ChooseAdditionalAdvances(ChooseAdditionalAdvances),
5855

59-
// combat
60-
PlayActionCard,
61-
Retreat,
62-
RemoveCasualties(RemoveCasualtiesSelection),
63-
6456
// custom
6557
Sports((Payment, Position)),
6658
Theaters(Payment),
6759
Taxes(Payment),
68-
CustomPhaseResourceRewardRequest(Payment),
69-
CustomPhaseAdvanceRewardRequest(CustomPhaseAdvanceRewardRequest),
70-
CustomPhasePaymentRequest(Vec<Payment>),
71-
CustomPhasePositionRequest(CustomPhasePositionRequest),
72-
CustomPhaseUnitRequest(CustomPhaseUnitRequest),
60+
ResourceRewardRequest(Payment),
61+
AdvanceRewardRequest(AdvanceRewardRequest),
62+
PaymentRequest(Vec<Payment>),
63+
PositionRequest(PositionRequest),
64+
UnitTypeRequest(UnitTypeRequest),
65+
UnitsRequest(UnitsSelection),
66+
BoolRequest,
7367
}
7468

7569
impl ActiveDialog {
@@ -98,17 +92,16 @@ impl ActiveDialog {
9892
ActiveDialog::DetermineFirstPlayer => "determine first player",
9993
ActiveDialog::ChangeGovernmentType => "change government type",
10094
ActiveDialog::ChooseAdditionalAdvances(_) => "choose additional advances",
101-
ActiveDialog::PlayActionCard => "play action card",
102-
ActiveDialog::Retreat => "retreat",
103-
ActiveDialog::RemoveCasualties(_) => "remove casualties",
10495
ActiveDialog::Sports(_) => "sports",
10596
ActiveDialog::Theaters(_) => "theaters",
10697
ActiveDialog::Taxes(_) => "collect taxes",
107-
ActiveDialog::CustomPhaseResourceRewardRequest(_) => "trade route selection",
108-
ActiveDialog::CustomPhaseAdvanceRewardRequest(_) => "advance selection",
109-
ActiveDialog::CustomPhasePaymentRequest(_) => "custom phase payment request",
110-
ActiveDialog::CustomPhasePositionRequest(_) => "custom phase position request",
111-
ActiveDialog::CustomPhaseUnitRequest(_) => "custom phase unit request",
98+
ActiveDialog::ResourceRewardRequest(_) => "trade route selection",
99+
ActiveDialog::AdvanceRewardRequest(_) => "advance selection",
100+
ActiveDialog::PaymentRequest(_) => "custom phase payment request",
101+
ActiveDialog::PositionRequest(_) => "custom phase position request",
102+
ActiveDialog::UnitTypeRequest(_) => "custom phase unit request",
103+
ActiveDialog::UnitsRequest(_) => "custom phase units request",
104+
ActiveDialog::BoolRequest => "custom phase bool request",
112105
}
113106
}
114107

@@ -166,16 +159,6 @@ impl ActiveDialog {
166159
ActiveDialog::ChooseAdditionalAdvances(_) => {
167160
vec!["Click on an advance to choose it".to_string()]
168161
}
169-
ActiveDialog::PlayActionCard => vec!["Click on an action card to play it".to_string()],
170-
ActiveDialog::Retreat => vec!["Do you want to retreat?".to_string()],
171-
ActiveDialog::RemoveCasualties(r) => vec![format!(
172-
"Remove {} units: click on a unit to remove it",
173-
if r.needed_carried > 0 {
174-
format!("{} ships and {} carried units", r.needed, r.needed_carried)
175-
} else {
176-
r.needed.to_string()
177-
}
178-
)],
179162
ActiveDialog::WaitingForUpdate => vec!["Waiting for server update".to_string()],
180163
ActiveDialog::Sports(_) => {
181164
event_help(rc, &EventOrigin::Advance("Sports".to_string()), true)
@@ -186,15 +169,13 @@ impl ActiveDialog {
186169
ActiveDialog::Theaters(_) => {
187170
event_help(rc, &EventOrigin::Advance("Theaters".to_string()), true)
188171
}
189-
ActiveDialog::CustomPhaseResourceRewardRequest(_)
190-
| ActiveDialog::CustomPhaseAdvanceRewardRequest(_)
191-
| ActiveDialog::CustomPhasePaymentRequest(_) => custom_phase_event_help(rc, None),
192-
ActiveDialog::CustomPhasePositionRequest(r) => {
193-
custom_phase_event_help(rc, r.description.as_ref())
194-
}
195-
ActiveDialog::CustomPhaseUnitRequest(r) => {
196-
custom_phase_event_help(rc, r.description.as_ref())
197-
}
172+
ActiveDialog::ResourceRewardRequest(_)
173+
| ActiveDialog::AdvanceRewardRequest(_)
174+
| ActiveDialog::PaymentRequest(_)
175+
| ActiveDialog::BoolRequest => custom_phase_event_help(rc, None),
176+
ActiveDialog::PositionRequest(r) => custom_phase_event_help(rc, r.description.as_ref()),
177+
ActiveDialog::UnitTypeRequest(r) => custom_phase_event_help(rc, r.description.as_ref()),
178+
ActiveDialog::UnitsRequest(r) => custom_phase_event_help(rc, r.description.as_ref()),
198179
}
199180
}
200181

@@ -245,7 +226,7 @@ impl ActiveDialog {
245226
| ActiveDialog::AdvancePayment(_)
246227
| ActiveDialog::ChangeGovernmentType
247228
| ActiveDialog::ChooseAdditionalAdvances(_)
248-
| ActiveDialog::CustomPhaseAdvanceRewardRequest(_)
229+
| ActiveDialog::AdvanceRewardRequest(_)
249230
)
250231
}
251232
}
@@ -538,9 +519,9 @@ impl State {
538519

539520
#[must_use]
540521
pub fn game_state_dialog(&self, game: &Game) -> ActiveDialog {
541-
if let Some(e) = &game.custom_phase_state.current {
522+
if let Some(e) = &game.current_custom_phase_event() {
542523
return match &e.request {
543-
CustomPhaseRequest::Payment(r) => ActiveDialog::CustomPhasePaymentRequest(
524+
CustomPhaseRequest::Payment(r) => ActiveDialog::PaymentRequest(
544525
r.iter()
545526
.map(|p| {
546527
Payment::new(
@@ -553,19 +534,17 @@ impl State {
553534
.collect(),
554535
),
555536
CustomPhaseRequest::ResourceReward(r) => {
556-
ActiveDialog::CustomPhaseResourceRewardRequest(Payment::new_gain(
557-
&r.reward, &r.name,
558-
))
537+
ActiveDialog::ResourceRewardRequest(Payment::new_gain(&r.reward, &r.name))
559538
}
560539
CustomPhaseRequest::AdvanceReward(r) => {
561-
ActiveDialog::CustomPhaseAdvanceRewardRequest(r.clone())
562-
}
563-
CustomPhaseRequest::SelectPosition(r) => {
564-
ActiveDialog::CustomPhasePositionRequest(r.clone())
565-
}
566-
CustomPhaseRequest::SelectUnit(r) => {
567-
ActiveDialog::CustomPhaseUnitRequest(r.clone())
540+
ActiveDialog::AdvanceRewardRequest(r.clone())
568541
}
542+
CustomPhaseRequest::SelectPosition(r) => ActiveDialog::PositionRequest(r.clone()),
543+
CustomPhaseRequest::SelectUnitType(r) => ActiveDialog::UnitTypeRequest(r.clone()),
544+
CustomPhaseRequest::SelectUnits(r) => ActiveDialog::UnitsRequest(
545+
UnitsSelection::new(r.needed, r.choices.clone(), r.description.clone()),
546+
),
547+
CustomPhaseRequest::BoolRequest => ActiveDialog::BoolRequest,
569548
};
570549
}
571550
match &game.state {
@@ -587,39 +566,7 @@ impl State {
587566
StatusPhaseState::ChangeGovernmentType => ActiveDialog::ChangeGovernmentType,
588567
StatusPhaseState::DetermineFirstPlayer => ActiveDialog::DetermineFirstPlayer,
589568
},
590-
GameState::Combat(c) => match &c.phase {
591-
CombatPhase::PlayActionCard(_) => ActiveDialog::PlayActionCard,
592-
CombatPhase::RemoveCasualties(r) => {
593-
let (position, selectable) = if r.player == c.attacker {
594-
(
595-
c.attacker_position,
596-
active_attackers(game, c.attacker, &c.attackers, c.defender_position)
597-
.clone()
598-
.into_iter()
599-
.chain(c.attackers.iter().flat_map(|a| {
600-
let units = carried_units(*a, game.get_player(r.player));
601-
units
602-
}))
603-
.collect(),
604-
)
605-
} else if r.player == c.defender {
606-
(
607-
c.defender_position,
608-
active_defenders(game, c.defender, c.defender_position),
609-
)
610-
} else {
611-
panic!("player should be either defender or attacker")
612-
};
613-
ActiveDialog::RemoveCasualties(RemoveCasualtiesSelection::new(
614-
r.player,
615-
position,
616-
r.casualties,
617-
r.carried_units_casualties,
618-
selectable,
619-
))
620-
}
621-
CombatPhase::Retreat => ActiveDialog::Retreat,
622-
},
569+
GameState::Combat(_) => panic!("should be in custom phase"),
623570
GameState::ExploreResolution(r) => {
624571
ActiveDialog::ExploreResolution(ExploreResolutionConfig {
625572
block: r.block.clone(),

0 commit comments

Comments
 (0)