Skip to main content

nil_core/military/unit/
axeman.rs

1// Copyright (C) Call of Nil contributors
2// SPDX-License-Identifier: AGPL-3.0-only
3
4use super::stats::prelude::*;
5use super::{UnitChunk, UnitChunkSize, UnitId, UnitKind};
6use crate::check_total_resource_ratio;
7use crate::infrastructure::building::{BuildingId, BuildingLevel};
8use crate::infrastructure::requirements::InfrastructureRequirements;
9use crate::ranking::score::Score;
10use crate::resources::prelude::*;
11use nil_core_macros::Unit;
12
13#[derive(Unit, Clone, Debug)]
14pub struct Axeman;
15
16impl Axeman {
17  pub const ID: UnitId = UnitId::Axeman;
18  pub const KIND: UnitKind = UnitKind::Infantry;
19  pub const BUILDING: BuildingId = BuildingId::Academy;
20
21  pub const SCORE: Score = Score::new(1);
22
23  pub const STATS: UnitStats = UnitStats::builder()
24    .attack(Power::new(40))
25    .infantry_defense(Power::new(10))
26    .cavalry_defense(Power::new(5))
27    .ranged_defense(Power::new(10))
28    .ranged_debuff(RangedDebuff::MIN)
29    .speed(Speed::new(2.0))
30    .haul(Haul::new(10))
31    .build();
32
33  pub const CHUNK: UnitChunk = UnitChunk {
34    size: UnitChunkSize::new(10),
35    cost: Cost::new(1300),
36    wood_ratio: ResourceRatio::new(0.45),
37    stone_ratio: ResourceRatio::new(0.25),
38    iron_ratio: ResourceRatio::new(0.3),
39    maintenance_ratio: MaintenanceRatio::new(0.005),
40    workforce: Workforce::new(1),
41  };
42
43  pub const INFRASTRUCTURE_REQUIREMENTS: InfrastructureRequirements =
44    InfrastructureRequirements::builder()
45      .academy(BuildingLevel::new(1))
46      .build();
47}
48
49check_total_resource_ratio!(
50  Axeman::CHUNK.wood_ratio,
51  Axeman::CHUNK.stone_ratio,
52  Axeman::CHUNK.iron_ratio
53);