Skip to main content

nil_core/infrastructure/building/impl/
quarry.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, BuildingLevel, MineId};
6use crate::infrastructure::mine::MineProduction;
7use crate::infrastructure::requirements::InfrastructureRequirements;
8use crate::ranking::score::Score;
9use crate::resources::cost::{Cost, ResourceRatio};
10use crate::resources::maintenance::MaintenanceRatio;
11use crate::resources::workforce::Workforce;
12use nil_core_macros::{Building, Mine};
13use serde::{Deserialize, Serialize};
14
15#[derive(Building, Mine, Clone, Debug, Deserialize, Serialize)]
16#[serde(rename_all = "camelCase")]
17#[cfg_attr(feature = "typescript", derive(ts_rs::TS))]
18pub struct Quarry {
19  level: BuildingLevel,
20  enabled: bool,
21}
22
23impl Quarry {
24  pub const ID: BuildingId = BuildingId::Quarry;
25  pub const MINE_ID: MineId = MineId::Quarry;
26
27  pub const MIN_LEVEL: BuildingLevel = BuildingLevel::ZERO;
28  pub const MAX_LEVEL: BuildingLevel = BuildingLevel::new(30);
29
30  pub const MIN_COST: Cost = Cost::new(100);
31  pub const MAX_COST: Cost = Cost::new(72_000);
32
33  pub const FOOD_RATIO: ResourceRatio = ResourceRatio::new(0.0);
34  pub const IRON_RATIO: ResourceRatio = ResourceRatio::new(0.35);
35  pub const STONE_RATIO: ResourceRatio = ResourceRatio::new(0.2);
36  pub const WOOD_RATIO: ResourceRatio = ResourceRatio::new(0.45);
37
38  pub const MAINTENANCE_RATIO: MaintenanceRatio = MaintenanceRatio::new(0.005);
39
40  pub const MIN_WORKFORCE: Workforce = Workforce::new(1);
41  pub const MAX_WORKFORCE: Workforce = Workforce::new(150);
42
43  pub const MIN_PRODUCTION: MineProduction = MineProduction::new(250);
44  pub const MAX_PRODUCTION: MineProduction = MineProduction::new(2_400);
45
46  pub const MIN_SCORE: Score = Score::new(6);
47  pub const MAX_SCORE: Score = Score::new(1_187);
48
49  pub const INFRASTRUCTURE_REQUIREMENTS: InfrastructureRequirements =
50    InfrastructureRequirements::none();
51}
52
53impl const Default for Quarry {
54  fn default() -> Self {
55    Self {
56      level: BuildingLevel::new(1),
57      enabled: true,
58    }
59  }
60}
61
62check_total_resource_ratio!(
63  Quarry::FOOD_RATIO,
64  Quarry::IRON_RATIO,
65  Quarry::STONE_RATIO,
66  Quarry::WOOD_RATIO
67);