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