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().clone())
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 if let Some(player) = ruler.player().cloned() {
25 world.emit_player(player)?;
26 }
27
28 Ok(())
29}
30
31#[inline]
32pub fn set_max_resources(world: &mut World, ruler: &Ruler) -> Result<()> {
33 set_resources(world, ruler, Resources::MAX.clone())
34}
35
36pub fn set_max_silo_resources(world: &mut World, ruler: &Ruler) -> Result<()> {
37 let resources = Resources::builder().food(Food::MAX).build();
38 set_resources(world, ruler, resources)
39}
40
41pub fn set_max_warehouse_resources(world: &mut World, ruler: &Ruler) -> Result<()> {
42 Resources::builder()
43 .iron(Iron::MAX)
44 .stone(Stone::MAX)
45 .wood(Wood::MAX)
46 .build()
47 .pipe(|resources| set_resources(world, ruler, resources))
48}
49
50pub fn set_food(world: &mut World, ruler: &Ruler, food: Food) -> Result<()> {
51 world
52 .ruler(ruler)?
53 .resources()
54 .with_food(food)
55 .pipe(|resources| set_resources(world, ruler, resources))
56}
57
58#[inline]
59pub fn set_max_food(world: &mut World, ruler: &Ruler) -> Result<()> {
60 set_food(world, ruler, Food::MAX)
61}
62
63pub fn set_iron(world: &mut World, ruler: &Ruler, iron: Iron) -> Result<()> {
64 world
65 .ruler(ruler)?
66 .resources()
67 .with_iron(iron)
68 .pipe(|resources| set_resources(world, ruler, resources))
69}
70
71#[inline]
72pub fn set_max_iron(world: &mut World, ruler: &Ruler) -> Result<()> {
73 set_iron(world, ruler, Iron::MAX)
74}
75
76pub fn set_stone(world: &mut World, ruler: &Ruler, stone: Stone) -> Result<()> {
77 world
78 .ruler(ruler)?
79 .resources()
80 .with_stone(stone)
81 .pipe(|resources| set_resources(world, ruler, resources))
82}
83
84#[inline]
85pub fn set_max_stone(world: &mut World, ruler: &Ruler) -> Result<()> {
86 set_stone(world, ruler, Stone::MAX)
87}
88
89pub fn set_wood(world: &mut World, ruler: &Ruler, wood: Wood) -> Result<()> {
90 world
91 .ruler(ruler)?
92 .resources()
93 .with_wood(wood)
94 .pipe(|resources| set_resources(world, ruler, resources))
95}
96
97#[inline]
98pub fn set_max_wood(world: &mut World, ruler: &Ruler) -> Result<()> {
99 set_wood(world, ruler, Wood::MAX)
100}