Skip to main content

nil_core/military/unit/impl/
swordsman.rs

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