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 nil_core_macros::Precursor;
9use serde::{Deserialize, Serialize};
10
11#[derive(Precursor, Clone, Debug, Deserialize, Serialize)]
12#[serde(rename_all = "camelCase")]
13pub struct B {
14 origin: Coord,
15 resources: Resources,
16}
17
18impl B {
19 pub const ID: PrecursorId = PrecursorId::B;
20 pub const ETHICS: Ethics = Ethics::builder()
21 .power(EthicPowerAxis::Pacifist)
22 .truth(EthicTruthAxis::FanaticSpiritualist)
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
33pub fn origin(size: ContinentSize) -> Coord {
34 let size = u8::from(size);
35 let radius = size.div_ceil(20).next_multiple_of(2);
36 Coord::splat(size - 1) - Coord::splat(radius)
37}