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