Skip to main content

nil_core/world/
battle.rs

1// Copyright (C) Call of Nil contributors
2// SPDX-License-Identifier: AGPL-3.0-only
3
4use 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}