Skip to main content

nil_core/npc/precursor/
b.rs

1// Copyright (C) Call of Nil contributors
2// SPDX-License-Identifier: AGPL-3.0-only
3
4use crate::continent::{ContinentSize, Coord};
5use crate::ethic::{EthicPowerAxis, EthicTruthAxis, Ethics};
6use crate::npc::precursor::PrecursorId;
7use crate::resources::Resources;
8use crate::resources::influence::Influence;
9use nil_core_macros::Precursor;
10use serde::{Deserialize, Serialize};
11
12#[derive(Precursor, Clone, Debug, Deserialize, Serialize)]
13#[serde(rename_all = "camelCase")]
14pub struct B {
15  origin: Coord,
16  resources: Resources,
17  influence: Influence,
18}
19
20impl B {
21  pub const ID: PrecursorId = PrecursorId::B;
22  pub const ETHICS: Ethics = Ethics::builder()
23    .power(EthicPowerAxis::Militarist)
24    .truth(EthicTruthAxis::FanaticSpiritualist)
25    .build();
26
27  pub const fn new(size: ContinentSize) -> Self {
28    Self {
29      origin: origin(size),
30      resources: Resources::PRECURSOR.clone(),
31      influence: Influence::MAX,
32    }
33  }
34}
35
36const fn origin(size: ContinentSize) -> Coord {
37  let size = u8::from(size);
38  let radius = size.div_ceil(20).next_multiple_of(2);
39  Coord::splat(size - 1) - Coord::splat(radius)
40}