1use crate::battle::luck::Luck;
5use crate::battle::{Battle, BattleResult};
6use crate::error::Result;
7use crate::infrastructure::prelude::BuildingLevel;
8use crate::military::squad::Squad;
9use crate::world::World;
10
11impl World {
12 pub fn simulate_battle(
13 &self,
14 attacker: &[Squad],
15 defender: &[Squad],
16 luck: Luck,
17 wall: BuildingLevel,
18 ) -> Result<BattleResult> {
19 let wall_stats = (wall > BuildingLevel::ZERO)
20 .then(|| self.stats.infrastructure.wall().get(wall))
21 .transpose()?;
22
23 let result = Battle::builder()
24 .attacker(attacker)
25 .defender(defender)
26 .luck(luck)
27 .maybe_wall(wall_stats)
28 .build()
29 .result();
30
31 Ok(result)
32 }
33}