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