nil_core/military/unit/impl/
pikeman.rs1use 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 Pikeman;
16
17impl Pikeman {
18 pub const ID: UnitId = UnitId::Pikeman;
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(10))
26 .defense(
27 DefensePower::builder()
28 .cavalry(Power::new(45))
29 .infantry(Power::new(15))
30 .ranged(Power::new(20))
31 .build(),
32 )
33 .ranged_debuff(RangedDebuff::MIN)
34 .base_speed(Speed::new(2.0))
35 .haul(Haul::new(25))
36 .build();
37
38 pub const CHUNK: UnitChunk = UnitChunk {
39 size: UnitChunkSize::new(10),
40 cost: Cost::new(900),
41 food_ratio: ResourceRatio::new(0.0),
42 iron_ratio: ResourceRatio::new(0.10),
43 stone_ratio: ResourceRatio::new(0.35),
44 wood_ratio: ResourceRatio::new(0.55),
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 Pikeman::CHUNK.food_ratio,
57 Pikeman::CHUNK.iron_ratio,
58 Pikeman::CHUNK.stone_ratio,
59 Pikeman::CHUNK.wood_ratio
60);