nil_core/world/cheat/
resources.rs1use crate::bail_if_cheats_are_not_allowed;
5use crate::error::Result;
6use crate::resources::prelude::*;
7use crate::ruler::Ruler;
8use crate::world::World;
9use tap::Pipe;
10
11pub fn get_resources(world: &World, ruler: &Ruler) -> Result<Resources> {
12 bail_if_cheats_are_not_allowed!(world);
13 world
14 .ruler(ruler)
15 .map(|ruler| ruler.resources())
16}
17
18pub fn set_resources(world: &mut World, ruler: &Ruler, resources: Resources) -> Result<()> {
19 bail_if_cheats_are_not_allowed!(world);
20
21 let mut ruler_ref = world.ruler_mut(ruler)?;
22 *ruler_ref.resources_mut() = resources;
23
24 world.emit_ruler(ruler)?;
25
26 Ok(())
27}
28
29#[inline]
30pub fn set_max_resources(world: &mut World, ruler: &Ruler) -> Result<()> {
31 set_resources(world, ruler, Resources::MAX)
32}
33
34pub fn set_max_silo_resources(world: &mut World, ruler: &Ruler) -> Result<()> {
35 let resources = Resources::builder().food(Food::MAX).build();
36 set_resources(world, ruler, resources)
37}
38
39pub fn set_max_warehouse_resources(world: &mut World, ruler: &Ruler) -> Result<()> {
40 Resources::builder()
41 .iron(Iron::MAX)
42 .stone(Stone::MAX)
43 .wood(Wood::MAX)
44 .build()
45 .pipe(|resources| set_resources(world, ruler, resources))
46}
47
48pub fn set_food(world: &mut World, ruler: &Ruler, food: Food) -> Result<()> {
49 world
50 .ruler(ruler)?
51 .resources()
52 .with_food(food)
53 .pipe(|resources| set_resources(world, ruler, resources))
54}
55
56#[inline]
57pub fn set_max_food(world: &mut World, ruler: &Ruler) -> Result<()> {
58 set_food(world, ruler, Food::MAX)
59}
60
61pub fn set_iron(world: &mut World, ruler: &Ruler, iron: Iron) -> Result<()> {
62 world
63 .ruler(ruler)?
64 .resources()
65 .with_iron(iron)
66 .pipe(|resources| set_resources(world, ruler, resources))
67}
68
69#[inline]
70pub fn set_max_iron(world: &mut World, ruler: &Ruler) -> Result<()> {
71 set_iron(world, ruler, Iron::MAX)
72}
73
74pub fn set_stone(world: &mut World, ruler: &Ruler, stone: Stone) -> Result<()> {
75 world
76 .ruler(ruler)?
77 .resources()
78 .with_stone(stone)
79 .pipe(|resources| set_resources(world, ruler, resources))
80}
81
82#[inline]
83pub fn set_max_stone(world: &mut World, ruler: &Ruler) -> Result<()> {
84 set_stone(world, ruler, Stone::MAX)
85}
86
87pub fn set_wood(world: &mut World, ruler: &Ruler, wood: Wood) -> Result<()> {
88 world
89 .ruler(ruler)?
90 .resources()
91 .with_wood(wood)
92 .pipe(|resources| set_resources(world, ruler, resources))
93}
94
95#[inline]
96pub fn set_max_wood(world: &mut World, ruler: &Ruler) -> Result<()> {
97 set_wood(world, ruler, Wood::MAX)
98}