nil_core/npc/precursor/
b.rs1use 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 B {
16 origin: Coord,
17 resources: Resources,
18 influence: Influence,
19}
20
21impl B {
22 pub const ID: PrecursorId = PrecursorId::B;
23 pub const ETHICS: Ethics = Ethics::builder()
24 .power(EthicPowerAxis::Militarist)
25 .truth(EthicTruthAxis::FanaticSpiritualist)
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(size - 1) - Coord::splat(radius)
41}