nil_core/military/unit/
archer.rs1use 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 Archer;
15
16impl Archer {
17 pub const ID: UnitId = UnitId::Archer;
18 pub const KIND: UnitKind = UnitKind::Ranged;
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(30))
25 .infantry_defense(Power::new(40))
26 .cavalry_defense(Power::new(35))
27 .ranged_defense(Power::new(5))
28 .ranged_debuff(RangedDebuff::new(0.5))
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(1900),
36 wood_ratio: ResourceRatio::new(0.5),
37 stone_ratio: ResourceRatio::new(0.15),
38 iron_ratio: ResourceRatio::new(0.35),
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(5))
46 .build();
47}
48
49check_total_resource_ratio!(
50 Archer::CHUNK.wood_ratio,
51 Archer::CHUNK.stone_ratio,
52 Archer::CHUNK.iron_ratio
53);