nil_core/npc/precursor/
b.rs1use 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}