Pioneer
Economy.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef GALAXY_ECONOMY_H
5 #define GALAXY_ECONOMY_H
6 
7 #include "JsonFwd.h"
8 #include "fixed.h"
9 
10 #include <array>
11 #include <cstddef>
12 #include <map>
13 #include <string>
14 #include <vector>
15 
16 namespace GalacticEconomy {
17  // Loads JSON files containing information about commodities.
18  void Init();
19 
20  // Call at the start of loading a game, before any other code makes references to commodity Ids.
21  // Loads and restores the commodity ID mappings in the saved game
22  // Commodity/EconomyIds returned by economy functions are only guaranteed to be correct with
23  // respect to the saved state between a FromJson() and ToJson() call.
24  void LoadFromJson(const Json &obj);
25 
26  // Call when saving a game, serializes out name -> CommodityId mappings
27  void SaveToJson(Json &obj);
28 
29  using CommodityId = uint32_t;
30  static const CommodityId InvalidCommodityId = 0;
31  using EconomyId = uint32_t;
32  static const EconomyId InvalidEconomyId = 0;
33 
34  // Information about a particular commodity type
35  struct CommodityInfo {
36  using Input = std::pair<CommodityId, fixed>;
37  static const int MAX_ECON_INPUTS = 2;
38 
41 
42  const char *name;
43  const char *l10n_key;
44 
45  // production requirement. eg metal alloys input would be metal ore
46  // (used in trade balance calculations)
47  std::array<Input, MAX_ECON_INPUTS> inputs;
48  float price;
49 
50  // The chance this commodity is legal in a random system, expressed as chance[0] / chance[1]
52  };
53 
54  // Information about a particular economy type.
55  struct EconomyInfo {
57  const char *name;
58 
59  struct TranslationKeys {
60  const char *small;
61  const char *medium;
62  const char *large;
63  const char *huge;
65 
71 
79  };
80 
81  struct ConsumableInfo {
82  std::array<uint32_t, 2> random_consumption;
84  };
85 
86  // A list of all defined commodities
87  const std::vector<CommodityInfo> &Commodities();
88 
89  // A list of all defined economies.
90  const std::vector<EconomyInfo> &Economies();
91 
92  // Commodities consumed by populated stations / worlds
93  const std::map<CommodityId, ConsumableInfo> &Consumables();
94 
95  // Returns a reference to a null CommodityInfo structure if passed InvalidCommodityId
97 
98  // Returns a reference to a null EconomyInfo structure if passed InvalidEconomyId
100 
101  // Returns InvalidCommodityId if there is no commodity by that name
102  CommodityId GetCommodityByName(const std::string &name);
103 
104  // Returns InvalidEconomyId if there is no economy by that name
105  EconomyId GetEconomyByName(const std::string &name);
106 
107 } // namespace GalacticEconomy
108 
109 #endif
nlohmann::json Json
Definition: Json.h:8
Definition: Economy.cpp:15
void SaveToJson(Json &obj)
Definition: Economy.cpp:285
uint32_t CommodityId
Definition: Economy.h:29
void LoadFromJson(const Json &obj)
Definition: Economy.cpp:279
const std::vector< CommodityInfo > & Commodities()
Definition: Economy.cpp:304
CommodityId GetCommodityByName(const std::string &name)
Definition: Economy.cpp:333
EconomyId GetEconomyByName(const std::string &name)
Definition: Economy.cpp:338
uint32_t EconomyId
Definition: Economy.h:31
const std::map< CommodityId, ConsumableInfo > & Consumables()
Definition: Economy.cpp:314
const std::vector< EconomyInfo > & Economies()
Definition: Economy.cpp:309
void Init()
Definition: Economy.cpp:263
const EconomyInfo & GetEconomyById(EconomyId Id)
Definition: Economy.cpp:326
const CommodityInfo & GetCommodityById(CommodityId Id)
Definition: Economy.cpp:319
Definition: Input.cpp:21
Definition: Economy.h:35
float price
Definition: Economy.h:48
std::array< Input, MAX_ECON_INPUTS > inputs
Definition: Economy.h:47
CommodityId id
Definition: Economy.h:39
EconomyId producer
Definition: Economy.h:40
fixed default_legality
Definition: Economy.h:51
const char * name
Definition: Economy.h:42
static const int MAX_ECON_INPUTS
Definition: Economy.h:37
const char * l10n_key
Definition: Economy.h:43
Definition: Economy.h:81
std::array< uint32_t, 2 > random_consumption
Definition: Economy.h:82
fixed locally_produced_min
Definition: Economy.h:83
fixed industrial
Definition: Economy.h:68
fixed agricultural
Definition: Economy.h:67
fixed metallicity
Definition: Economy.h:69
fixed population
Definition: Economy.h:76
fixed agricultural
Definition: Economy.h:73
fixed metallicity
Definition: Economy.h:75
fixed industrial
Definition: Economy.h:74
const char * large
Definition: Economy.h:62
const char * huge
Definition: Economy.h:63
const char * medium
Definition: Economy.h:61
const char * small
Definition: Economy.h:60
Definition: Economy.h:55
struct GalacticEconomy::EconomyInfo::GenerationAffinity generation
struct GalacticEconomy::EconomyInfo::CommodityAffinity affinity
EconomyId id
Definition: Economy.h:56
struct GalacticEconomy::EconomyInfo::TranslationKeys l10n_key
const char * name
Definition: Economy.h:57