Skip to main content

nil_core/military/unit/
heavy_cavalry.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 HeavyCavalry;
15
16impl HeavyCavalry {
17  pub const ID: UnitId = UnitId::HeavyCavalry;
18  pub const KIND: UnitKind = UnitKind::Cavalry;
19  pub const BUILDING: BuildingId = BuildingId::Stable;
20
21  pub const SCORE: Score = Score::new(6);
22
23  pub const STATS: UnitStats = UnitStats::builder()
24    .attack(Power::new(150))
25    .infantry_defense(Power::new(200))
26    .cavalry_defense(Power::new(80))
27    .ranged_defense(Power::new(180))
28    .ranged_debuff(RangedDebuff::MIN)
29    .speed(Speed::new(3.5))
30    .haul(Haul::new(50))
31    .build();
32
33  pub const CHUNK: UnitChunk = UnitChunk {
34    size: UnitChunkSize::new(5),
35    cost: Cost::new(4750),
36    wood_ratio: ResourceRatio::new(0.2),
37    stone_ratio: ResourceRatio::new(0.15),
38    iron_ratio: ResourceRatio::new(0.65),
39    maintenance_ratio: MaintenanceRatio::new(0.005),
40    workforce: Workforce::new(3),
41  };
42
43  pub const INFRASTRUCTURE_REQUIREMENTS: InfrastructureRequirements =
44    InfrastructureRequirements::builder()
45      .stable(BuildingLevel::new(3))
46      .build();
47}
48
49check_total_resource_ratio!(
50  HeavyCavalry::CHUNK.wood_ratio,
51  HeavyCavalry::CHUNK.stone_ratio,
52  HeavyCavalry::CHUNK.iron_ratio
53);