nil_core/world/cheat/
resources.rs1use tap::Pipe;
5
6use crate::bail_if_cheats_are_not_allowed;
7use crate::error::Result;
8use crate::resources::prelude::*;
9use crate::ruler::Ruler;
10use crate::world::World;
11
12impl World {
13 pub fn cheat_get_resources(&self, ruler: &Ruler) -> Result<Resources> {
14 bail_if_cheats_are_not_allowed!(self);
15 self
16 .ruler(ruler)
17 .map(|ruler| ruler.resources().clone())
18 }
19
20 pub fn cheat_set_resources(&mut self, ruler: &Ruler, resources: Resources) -> Result<()> {
21 bail_if_cheats_are_not_allowed!(self);
22
23 let mut ruler_ref = self.ruler_mut(ruler)?;
24 *ruler_ref.resources_mut() = resources;
25
26 if let Some(player) = ruler.player().cloned() {
27 self.emit_player_updated(player);
28 }
29
30 Ok(())
31 }
32
33 #[inline]
34 pub fn cheat_set_max_resources(&mut self, ruler: &Ruler) -> Result<()> {
35 self.cheat_set_resources(ruler, Resources::MAX.clone())
36 }
37
38 pub fn cheat_set_max_silo_resources(&mut self, ruler: &Ruler) -> Result<()> {
39 let resources = Resources::builder().food(Food::MAX).build();
40 self.cheat_set_resources(ruler, resources)
41 }
42
43 pub fn cheat_set_max_warehouse_resources(&mut self, ruler: &Ruler) -> Result<()> {
44 Resources::builder()
45 .iron(Iron::MAX)
46 .stone(Stone::MAX)
47 .wood(Wood::MAX)
48 .build()
49 .pipe(|resources| self.cheat_set_resources(ruler, resources))
50 }
51
52 pub fn cheat_set_food(&mut self, ruler: &Ruler, food: Food) -> Result<()> {
53 self
54 .ruler(ruler)?
55 .resources()
56 .with_food(food)
57 .pipe(|resources| self.cheat_set_resources(ruler, resources))
58 }
59
60 #[inline]
61 pub fn cheat_set_max_food(&mut self, ruler: &Ruler) -> Result<()> {
62 self.cheat_set_food(ruler, Food::MAX)
63 }
64
65 pub fn cheat_set_iron(&mut self, ruler: &Ruler, iron: Iron) -> Result<()> {
66 self
67 .ruler(ruler)?
68 .resources()
69 .with_iron(iron)
70 .pipe(|resources| self.cheat_set_resources(ruler, resources))
71 }
72
73 #[inline]
74 pub fn cheat_set_max_iron(&mut self, ruler: &Ruler) -> Result<()> {
75 self.cheat_set_iron(ruler, Iron::MAX)
76 }
77
78 pub fn cheat_set_stone(&mut self, ruler: &Ruler, stone: Stone) -> Result<()> {
79 self
80 .ruler(ruler)?
81 .resources()
82 .with_stone(stone)
83 .pipe(|resources| self.cheat_set_resources(ruler, resources))
84 }
85
86 #[inline]
87 pub fn cheat_set_max_stone(&mut self, ruler: &Ruler) -> Result<()> {
88 self.cheat_set_stone(ruler, Stone::MAX)
89 }
90
91 pub fn cheat_set_wood(&mut self, ruler: &Ruler, wood: Wood) -> Result<()> {
92 self
93 .ruler(ruler)?
94 .resources()
95 .with_wood(wood)
96 .pipe(|resources| self.cheat_set_resources(ruler, resources))
97 }
98
99 #[inline]
100 pub fn cheat_set_max_wood(&mut self, ruler: &Ruler) -> Result<()> {
101 self.cheat_set_wood(ruler, Wood::MAX)
102 }
103}