Skip to main content

nil_core/military/unit/stats/
mod.rs

1// Copyright (C) Call of Nil contributors
2// SPDX-License-Identifier: AGPL-3.0-only
3
4pub mod haul;
5pub mod power;
6pub mod prelude;
7pub mod ranged_debuff;
8pub mod speed;
9
10use crate::military::unit::stats::power::DefensePower;
11use bon::Builder;
12use prelude::*;
13use serde::{Deserialize, Serialize};
14
15#[derive(Builder, Debug, Deserialize, Serialize)]
16#[derive_const(Clone)]
17#[serde(rename_all = "camelCase")]
18#[builder(const)]
19pub struct UnitStats {
20  attack: AttackPower,
21  defense: DefensePower,
22  ranged_debuff: RangedDebuff,
23  base_speed: Speed,
24  haul: Haul,
25}
26
27impl UnitStats {
28  /// Average power.
29  #[inline]
30  pub const fn power(&self) -> Power {
31    (*self.attack + self.defense().mean()) / 2
32  }
33
34  #[inline]
35  pub const fn attack(&self) -> AttackPower {
36    self.attack
37  }
38
39  #[inline]
40  pub const fn defense(&self) -> DefensePower {
41    self.defense
42  }
43
44  #[inline]
45  pub const fn ranged_debuff(&self) -> RangedDebuff {
46    self.ranged_debuff
47  }
48
49  #[inline]
50  pub const fn base_speed(&self) -> Speed {
51    self.base_speed
52  }
53
54  #[inline]
55  pub const fn haul(&self) -> Haul {
56    self.haul
57  }
58}