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 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}