Pioneer
Loading...
Searching...
No Matches
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
16namespace 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
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
60 const char *small;
61 const char *medium;
62 const char *large;
63 const char *huge;
65
71
79 };
80
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 agricultural
Definition Economy.h:67
fixed metallicity
Definition Economy.h:69
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