nil_core/npc/precursor/
a.rs1use crate::capital::Capital;
5use crate::continent::coord::Coord;
6use crate::continent::size::ContinentSize;
7use crate::ethic::{EthicPowerAxis, EthicTruthAxis, Ethics};
8use crate::npc::precursor::PrecursorId;
9use crate::resources::Resources;
10use crate::resources::gold::Gold;
11use crate::resources::influence::Influence;
12use nil_core_macros::Precursor;
13use serde::{Deserialize, Serialize};
14
15#[derive(Precursor, Clone, Debug, Deserialize, Serialize)]
16#[serde(rename_all = "camelCase")]
17pub struct A {
18 origin: Coord,
19 capital: Capital,
20 resources: Resources,
21 gold: Gold,
22 influence: Influence,
23}
24
25impl A {
26 pub const ID: PrecursorId = PrecursorId::A;
27 pub const ETHICS: Ethics = Ethics::builder()
28 .power(EthicPowerAxis::Militarist)
29 .truth(EthicTruthAxis::FanaticMaterialist)
30 .build();
31
32 pub fn new(size: ContinentSize) -> Self {
33 let origin = origin(size);
34 Self {
35 origin,
36 capital: Capital::new(origin),
37 resources: Resources::PRECURSOR,
38 gold: Gold::MIN,
39 influence: Influence::MAX,
40 }
41 }
42}
43
44const fn origin(size: ContinentSize) -> Coord {
45 let size = u8::from(size);
46 let radius = size.div_ceil(20).next_multiple_of(2);
47 Coord::splat(0) + Coord::splat(radius)
48}