WorldSim  inDev
2D tile-based sandbox RPG with procedurally generated fantasy world simulator 🌏
Stockpile.hpp
Go to the documentation of this file.
1 #pragma once
2 #ifndef WORLDSIM_STOCKPILE_HPP
3 #define WORLDSIM_STOCKPILE_HPP
4 
5 /* WorldSim: Stockpile
6  #include "Stockpile.hpp"
7 
8  Manage resources for a settlement or civ.
9 
10  Resources are generally managed on a per-settlement basis in order to create logistics, but a civ will seek to
11  move resources efficiently between settlements.
12  Resources are hardcoded for simplicity.
13 
14  In some cases I may break the resources down into their own classes to manage quality, however generally this will
15  be best handled by crafting skill.
16 
17 */
18 
19 
20 #include "HasMoney.cpp"
21 #include "Creature.hpp"
22 #include "Item.hpp"
23 #include "Job.hpp"
24 #include <unordered_map>
25 #include <string>
26 #include <iostream>
27 
28 
29 class Craftable
30 {
31  public:
33 
34  Craftable();
35  Item* produce();
36 };
37 
39 {
40  Vector<Craftable> vRecipe;
41 
42  public:
43  // CraftableManager methods (if any)
44 };
45 
47 {
48  public:
50  int amount;
51 
52  Intermediate(enumIntermediate _type, int _amount);
53 };
54 
56 {
57  public:
58  Vector<Intermediate> vResource;
59 
61  IntermediateRequirement(enumIntermediate type, int amount);
62  void add(Intermediate resource);
63  void add(enumIntermediate _type, int _amount);
64  void print();
65 };
66 
67 class Resource
68 {
69  public:
71  int amount;
72 
73  Resource(enumResource _type, int _amount);
74 };
75 
77 {
78  public:
79  Vector<Resource> vResource;
80 
82  ResourceRequirement(enumResource type, int amount);
83  void add(Resource resource);
84  void add(enumResource _type, int _amount);
85  void print();
86 };
87 
88 // Class for items which have resource requirements.
89 
91 {
92  public:
95 
97 
98  void add(Resource resource);
99  void add(enumResource _type, int _amount);
100  void add(Intermediate intermediate);
101  void add(enumIntermediate _type, int _amount);
102  void print();
103 
104 };
105 
107 {
108  public:
110  virtual ResourceRequirement getResourceRequirement();
111 };
112 
114 {
115  public:
117  virtual StockpileRequirement getStockpileRequirement();
118 };
119 
120 class Stockpile : public HasMoney {
121 private:
122  std::unordered_map<enumResource, int> resourceMap;
123  std::unordered_map<enumIntermediate, int> intermediateMap;
124 
125 
126 public:
127  Vector<Item*> vItem;
128 
129  Stockpile();
130 
131  void add(enumResource type, int amount);
132  int get(enumResource type);
133  bool take(enumResource type, int amount);
134  bool hasEnough(enumResource type, int amount);
135 
136  void add(enumIntermediate type, int amount);
137  int get(enumIntermediate type);
138  bool take(enumIntermediate type, int amount);
139  bool hasEnough(enumIntermediate type, int amount);
140 
141  bool hasEnough(IntermediateRequirement requirement); // was canMake
142  bool hasEnough (Intermediate resource);
143  bool canMake (IntermediateRequirement requirement);
144 
145  bool hasEnough (Resource resource);
146  bool hasEnough(ResourceRequirement requirement);
147  bool canMake(ResourceRequirement requirement);
148 
149  bool canMake(StockpileRequirement requirement);
150 
151 
152  bool deduct(IntermediateRequirement requirement);
153  bool deduct(ResourceRequirement requirement);
154  bool deduct(StockpileRequirement requirement);
155 
156  void add(Item* item);
157  void take(Item* item);
158  int getNumOfType(ItemType type);
159  Item* getBestItemFor(Job job);
160  Item* getBestItemFor(Job* job);
161  int getNumberOfItems(ItemType type);
162 
163  void print();
164 };
165 
166 #endif // WORLDSIM_STOCKPILE_HPP
Definition: Stockpile.hpp:38
enumResource
Definition: Driver_Settings_Enums.hpp:125
enumIntermediate
Definition: Driver_Settings_Enums.hpp:164
enumIntermediate type
Definition: Stockpile.hpp:49
Definition: HasMoney.cpp:13
ResourceRequirement resourceRequirement
Definition: Stockpile.hpp:93
Vector< Intermediate > vResource
Definition: Stockpile.hpp:58
Definition: Item.hpp:51
enumResource type
Definition: Stockpile.hpp:70
Definition: Stockpile.hpp:55
Definition: Stockpile.hpp:46
Definition: Stockpile.hpp:67
Craftable()
Definition: Stockpile.cpp:8
bool requiresLocation
Definition: Stockpile.hpp:32
Definition: Job.hpp:7
Definition: Stockpile.hpp:29
Vector< Resource > vResource
Definition: Stockpile.hpp:79
Definition: Stockpile.hpp:90
int amount
Definition: Stockpile.hpp:50
Definition: Stockpile.hpp:113
Definition: Stockpile.hpp:106
IntermediateRequirement intermediateRequirement
Definition: Stockpile.hpp:94
Vector< Item * > vItem
Definition: Stockpile.hpp:127
int amount
Definition: Stockpile.hpp:71
Definition: Stockpile.hpp:120
Item * produce()
Definition: Stockpile.cpp:13
Definition: Stockpile.hpp:76
ItemType
Definition: Driver_Settings_Enums.hpp:268