Skip to main content

nil_core/world/cheat/
resources.rs

1// Copyright (C) Call of Nil contributors
2// SPDX-License-Identifier: AGPL-3.0-only
3
4use 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}