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::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 B {
17 origin: Coord,
18 resources: Resources,
19 gold: Gold,
20 influence: Influence,
21}
22
23impl B {
24 pub const ID: PrecursorId = PrecursorId::B;
25 pub const ETHICS: Ethics = Ethics::builder()
26 .power(EthicPowerAxis::Militarist)
27 .truth(EthicTruthAxis::FanaticSpiritualist)
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(size - 1) - Coord::splat(radius)
44}