Skip to main content

nil_core/npc/precursor/
a.rs

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