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::gold::Gold;
10use crate::resources::influence::Influence;
11use nil_core_macros::Precursor;
12use serde::{Deserialize, Serialize};
13
14#[derive(Precursor, Clone, Debug, Deserialize, Serialize)]
15#[serde(rename_all = "camelCase")]
16pub struct A {
17  origin: Coord,
18  resources: Resources,
19  gold: Gold,
20  influence: Influence,
21}
22
23impl A {
24  pub const ID: PrecursorId = PrecursorId::A;
25  pub const ETHICS: Ethics = Ethics::builder()
26    .power(EthicPowerAxis::Militarist)
27    .truth(EthicTruthAxis::FanaticMaterialist)
28    .build();
29
30  pub const fn new(size: ContinentSize) -> Self {
31    Self {
32      origin: origin(size),
33      resources: Resources::PRECURSOR,
34      gold: Gold::MIN,
35      influence: Influence::MAX,
36    }
37  }
38}
39
40const fn origin(size: ContinentSize) -> Coord {
41  let size = u8::from(size);
42  let radius = size.div_ceil(20).next_multiple_of(2);
43  Coord::splat(0) + Coord::splat(radius)
44}