nil_core/military/unit/
ram.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 Ram;
15
16impl Ram {
17 pub const ID: UnitId = UnitId::Ram;
18 pub const KIND: UnitKind = UnitKind::Infantry;
19 pub const BUILDING: BuildingId = BuildingId::Workshop;
20
21 pub const SCORE: Score = Score::new(5);
22
23 pub const STATS: UnitStats = UnitStats::builder()
24 .attack(Power::new(2))
25 .infantry_defense(Power::new(20))
26 .cavalry_defense(Power::new(50))
27 .ranged_defense(Power::new(20))
28 .ranged_debuff(RangedDebuff::MIN)
29 .speed(Speed::new(0.5))
30 .haul(Haul::new(0))
31 .build();
32
33 pub const CHUNK: UnitChunk = UnitChunk {
34 size: UnitChunkSize::new(3),
35 cost: Cost::new(2100),
36 wood_ratio: ResourceRatio::new(0.4),
37 stone_ratio: ResourceRatio::new(0.3),
38 iron_ratio: ResourceRatio::new(0.3),
39 maintenance_ratio: MaintenanceRatio::new(0.005),
40 workforce: Workforce::new(8),
41 };
42
43 pub const INFRASTRUCTURE_REQUIREMENTS: InfrastructureRequirements =
44 InfrastructureRequirements::builder()
45 .workshop(BuildingLevel::new(1))
46 .build();
47}
48
49check_total_resource_ratio!(
50 Ram::CHUNK.wood_ratio,
51 Ram::CHUNK.stone_ratio,
52 Ram::CHUNK.iron_ratio
53);