Pioneer
Loading...
Searching...
No Matches
StarSystem.h
Go to the documentation of this file.
1// Copyright © 2008-2024 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#ifndef _STARSYSTEM_H
5#define _STARSYSTEM_H
6
7#include "Polit.h"
8#include "Random.h"
9#include "RefCounted.h"
10#include "galaxy/Economy.h"
11#include "galaxy/GalaxyCache.h"
12#include "galaxy/SystemBody.h"
13#include "galaxy/SystemPath.h"
14#include "gameconsts.h"
15
16#include <SDL_stdinc.h>
17#include <string>
18#include <vector>
19
20class Faction;
21class Galaxy;
23class CustomSystem;
24
25// doubles - all masses in Kg, all lengths in meters
26// fixed - any mad scheme
27
28class StarSystem : public RefCounted {
29public:
30 friend class SystemBody;
31 friend class GalaxyObjectCache<StarSystem, SystemPath::LessSystemOnly>;
32 class GeneratorAPI; // Complete definition below
33 class EditorAPI; // Defined in editor module
34
36 eUNEXPLORED = 0,
37 eEXPLORED_BY_PLAYER = 1,
38 eEXPLORED_AT_START = 2
39 };
40
41 void ExportToLua(const char *filename);
42
43 const std::string &GetName() const { return m_name; }
44 std::vector<std::string> GetOtherNames() const { return m_other_names; }
45 SystemPath GetPathOf(const SystemBody *sbody) const;
46 SystemBody *GetBodyByPath(const SystemPath &path) const;
47 static void ToJson(Json &jsonObj, StarSystem *);
48 static RefCountedPtr<StarSystem> FromJson(RefCountedPtr<Galaxy> galaxy, const Json &jsonObj);
49 const SystemPath &GetPath() const { return m_path; }
50 const vector3f &GetPosition() const { return m_pos; }
51
52 const std::string &GetShortDescription() const { return m_shortDesc; }
53 const std::string &GetLongDescription() const { return m_longDesc; }
54 unsigned GetNumStars() const { return m_numStars; }
55 const SysPolit &GetSysPolit() const { return m_polit; }
56
57 static const Color starColors[];
58 static const Color starRealColors[];
59 static const double starLuminosities[];
60 static const float starScale[];
61
62 RefCountedPtr<const SystemBody> GetRootBody() const { return m_rootBody; }
63 RefCountedPtr<SystemBody> GetRootBody() { return m_rootBody; }
64 bool HasSpaceStations() const { return !m_spaceStations.empty(); }
65 Uint32 GetNumSpaceStations() const { return static_cast<Uint32>(m_spaceStations.size()); }
70 Uint32 GetNumBodies() const { return static_cast<Uint32>(m_bodies.size()); }
73
75 {
76 return m_commodityLegal[t];
77 }
78
80 {
81 return m_tradeLevel[t];
82 }
83
84 const Faction *GetFaction() const { return m_faction; }
85 bool GetUnexplored() const { return m_explored == eUNEXPLORED; }
86 ExplorationState GetExplored() const { return m_explored; }
87 double GetExploredTime() const { return m_exploredTime; }
88 void ExploreSystem(double time);
89
90 fixed GetMetallicity() const { return m_metallicity; }
91 fixed GetIndustrial() const { return m_industrial; }
92 fixed GetAgricultural() const { return m_agricultural; }
93 GalacticEconomy::EconomyId GetEconType() const { return m_econType; }
94 int GetSeed() const { return m_seed; }
95 fixed GetHumanProx() const { return m_humanProx; }
96 fixed GetTotalPop() const { return m_totalPop; }
97
98 void Dump(FILE *file, const char *indent = "", bool suppressSectorData = false) const;
99
100 // Dump all information about this system to JSON format suitable for
101 // loading as a custom system
102 void DumpToJson(Json &obj);
103
105
106protected:
107 StarSystem(const SystemPath &path, RefCountedPtr<Galaxy> galaxy, StarSystemCache *cache, Random &rand);
108 virtual ~StarSystem();
109
111 {
112 SystemBody *body = new SystemBody(SystemPath(m_path.sectorX, m_path.sectorY, m_path.sectorZ, m_path.systemIndex, static_cast<Uint32>(m_bodies.size())), this);
113 m_bodies.push_back(RefCountedPtr<SystemBody>(body));
114 return body;
115 }
116
118 void SetShortDesc(const std::string &desc) { m_shortDesc = desc; }
119
120private:
121 void SetCache(StarSystemCache *cache)
122 {
123 assert(!m_cache);
124 m_cache = cache;
125 }
126
127 std::string ExportBodyToLua(FILE *f, SystemBody *body);
128 std::string GetStarTypes(SystemBody *body);
129
130 SystemPath m_path;
131 vector3f m_pos;
132 unsigned m_numStars;
133 std::string m_name;
134 std::vector<std::string> m_other_names;
135 std::string m_shortDesc, m_longDesc;
136 SysPolit m_polit;
137
138 bool m_isCustom;
139 bool m_hasCustomBodies;
140
141 const Faction *m_faction;
142 ExplorationState m_explored;
143 double m_exploredTime;
144 fixed m_metallicity;
145 fixed m_industrial;
147 Uint32 m_seed;
148
149 // percent price alteration
150 std::vector<int> m_tradeLevel;
151
152 fixed m_agricultural;
153 fixed m_humanProx;
154 fixed m_totalPop;
155
156 RefCountedPtr<SystemBody> m_rootBody;
157 // index into this will be the SystemBody ID used by SystemPath
158 std::vector<RefCountedPtr<SystemBody>> m_bodies;
159 std::vector<SystemBody *> m_spaceStations;
160 std::vector<SystemBody *> m_stars;
161 std::vector<bool> m_commodityLegal;
162
163 StarSystemCache *m_cache;
164};
165
167private:
168 friend class GalaxyGenerator;
169
170public:
171 GeneratorAPI(const SystemPath &path, RefCountedPtr<Galaxy> galaxy, StarSystemCache *cache, Random &rand);
172
173 bool HasCustomBodies() const { return m_hasCustomBodies; }
174
175 void SetCustom(bool isCustom, bool hasCustomBodies)
176 {
177 m_isCustom = isCustom;
178 m_hasCustomBodies = hasCustomBodies;
179 }
180 void SetPosition(const vector3f &pos) { m_pos = pos; }
181 void SetNumStars(int numStars) { m_numStars = numStars; }
182 void SetRootBody(RefCountedPtr<SystemBody> rootBody) { m_rootBody = rootBody; }
183 void SetRootBody(SystemBody *rootBody) { m_rootBody.Reset(rootBody); }
184 void SetName(const std::string &name) { m_name = name; }
185 void SetOtherNames(const std::vector<std::string> &other_names) { m_other_names = other_names; }
186 void SetLongDesc(const std::string &desc) { m_longDesc = desc; }
187 void SetExplored(ExplorationState explored, double time)
188 {
189 m_explored = explored;
190 m_exploredTime = time;
191 }
192 void SetSeed(Uint32 seed) { m_seed = seed; }
193 void SetFaction(const Faction *faction) { m_faction = faction; }
194 void SetEconType(GalacticEconomy::EconomyId econType) { m_econType = econType; }
195 void SetSysPolit(SysPolit polit) { m_polit = polit; }
196 void SetMetallicity(fixed metallicity) { m_metallicity = metallicity; }
197 void SetIndustrial(fixed industrial) { m_industrial = industrial; }
198 void SetAgricultural(fixed agricultural) { m_agricultural = agricultural; }
199 void SetHumanProx(fixed humanProx) { m_humanProx = humanProx; }
200 void SetTotalPop(fixed pop) { m_totalPop = pop; }
201 void AddTotalPop(fixed pop) { m_totalPop += pop; }
202
203 int GetTradeLevel(GalacticEconomy::CommodityId type) { return m_tradeLevel[type]; }
204 void SetTradeLevel(GalacticEconomy::CommodityId type, int level) { m_tradeLevel[type] = level; }
205 void AddTradeLevel(GalacticEconomy::CommodityId type, int level) { m_tradeLevel[type] += level; }
206 void SetCommodityLegal(GalacticEconomy::CommodityId type, bool legal) { m_commodityLegal[type] = legal; }
207
209 {
210 assert(station->GetSuperType() == SystemBody::SUPERTYPE_STARPORT);
211 m_spaceStations.push_back(station);
212 }
213 void AddStar(SystemBody *star)
214 {
215 assert(star->GetSuperType() == SystemBody::SUPERTYPE_STAR);
216 m_stars.push_back(star);
217 }
221};
222
223#endif /* _STARSYSTEM_H */
IterationProxy< Container > MakeIterationProxy(Container &container)
Definition: IterationProxy.h:51
nlohmann::json Json
Definition: Json.h:8
Definition: CustomSystem.h:18
Definition: CustomSystem.h:45
Definition: Factions.h:21
Definition: GalaxyGenerator.h:17
Definition: GalaxyCache.h:20
Definition: Galaxy.h:18
Definition: IterationProxy.h:13
Definition: Random.h:29
Definition: RefCounted.h:36
Definition: RefCounted.h:11
Definition: GalaxyEditAPI.h:31
Definition: StarSystem.h:166
void SetExplored(ExplorationState explored, double time)
Definition: StarSystem.h:187
void SetOtherNames(const std::vector< std::string > &other_names)
Definition: StarSystem.h:185
void SetTradeLevel(GalacticEconomy::CommodityId type, int level)
Definition: StarSystem.h:204
void SetFaction(const Faction *faction)
Definition: StarSystem.h:193
void AddStar(SystemBody *star)
Definition: StarSystem.h:213
void SetTotalPop(fixed pop)
Definition: StarSystem.h:200
void SetCommodityLegal(GalacticEconomy::CommodityId type, bool legal)
Definition: StarSystem.h:206
void SetSeed(Uint32 seed)
Definition: StarSystem.h:192
void AddTotalPop(fixed pop)
Definition: StarSystem.h:201
void SetNumStars(int numStars)
Definition: StarSystem.h:181
void SetEconType(GalacticEconomy::EconomyId econType)
Definition: StarSystem.h:194
bool HasCustomBodies() const
Definition: StarSystem.h:173
void AddTradeLevel(GalacticEconomy::CommodityId type, int level)
Definition: StarSystem.h:205
void SetCustom(bool isCustom, bool hasCustomBodies)
Definition: StarSystem.h:175
int GetTradeLevel(GalacticEconomy::CommodityId type)
Definition: StarSystem.h:203
void SetHumanProx(fixed humanProx)
Definition: StarSystem.h:199
void SetRootBody(SystemBody *rootBody)
Definition: StarSystem.h:183
void SetIndustrial(fixed industrial)
Definition: StarSystem.h:197
void SetAgricultural(fixed agricultural)
Definition: StarSystem.h:198
void SetRootBody(RefCountedPtr< SystemBody > rootBody)
Definition: StarSystem.h:182
void SetMetallicity(fixed metallicity)
Definition: StarSystem.h:196
void AddSpaceStation(SystemBody *station)
Definition: StarSystem.h:208
void SetPosition(const vector3f &pos)
Definition: StarSystem.h:180
void SetName(const std::string &name)
Definition: StarSystem.h:184
void SetSysPolit(SysPolit polit)
Definition: StarSystem.h:195
void SetLongDesc(const std::string &desc)
Definition: StarSystem.h:186
Definition: StarSystem.h:28
int GetCommodityBasePriceModPercent(GalacticEconomy::CommodityId t)
Definition: StarSystem.h:79
const IterationProxy< const std::vector< RefCountedPtr< SystemBody > > > GetBodies() const
Definition: StarSystem.h:72
const RefCountedPtr< Galaxy > m_galaxy
Definition: StarSystem.h:104
Uint32 GetNumSpaceStations() const
Definition: StarSystem.h:65
bool IsCommodityLegal(const GalacticEconomy::CommodityId t)
Definition: StarSystem.h:74
IterationProxy< std::vector< SystemBody * > > GetSpaceStations()
Definition: StarSystem.h:66
fixed GetHumanProx() const
Definition: StarSystem.h:95
friend class SystemBody
Definition: StarSystem.h:30
static void ToJson(Json &jsonObj, StarSystem *)
Definition: StarSystem.cpp:349
IterationProxy< std::vector< SystemBody * > > GetStars()
Definition: StarSystem.h:68
GalacticEconomy::EconomyId GetEconType() const
Definition: StarSystem.h:93
RefCountedPtr< const SystemBody > GetRootBody() const
Definition: StarSystem.h:62
void DumpToJson(Json &obj)
Definition: StarSystem.cpp:562
ExplorationState GetExplored() const
Definition: StarSystem.h:86
static const double starLuminosities[]
Definition: StarSystem.h:59
int GetSeed() const
Definition: StarSystem.h:94
virtual ~StarSystem()
Definition: StarSystem.cpp:339
bool HasSpaceStations() const
Definition: StarSystem.h:64
const Faction * GetFaction() const
Definition: StarSystem.h:84
fixed GetAgricultural() const
Definition: StarSystem.h:92
SystemBody * GetBodyByPath(const SystemPath &path) const
Definition: StarSystem.cpp:201
const IterationProxy< const std::vector< SystemBody * > > GetStars() const
Definition: StarSystem.h:69
SystemBody * NewBody()
Definition: StarSystem.h:110
const std::string & GetLongDescription() const
Definition: StarSystem.h:53
fixed GetMetallicity() const
Definition: StarSystem.h:90
void ExploreSystem(double time)
Definition: StarSystem.cpp:326
double GetExploredTime() const
Definition: StarSystem.h:87
void Dump(FILE *file, const char *indent="", bool suppressSectorData=false) const
Definition: StarSystem.cpp:523
std::vector< std::string > GetOtherNames() const
Definition: StarSystem.h:44
static const float starScale[]
Definition: StarSystem.h:60
const std::string & GetName() const
Definition: StarSystem.h:43
IterationProxy< std::vector< RefCountedPtr< SystemBody > > > GetBodies()
Definition: StarSystem.h:71
fixed GetTotalPop() const
Definition: StarSystem.h:96
void SetShortDesc(const std::string &desc)
Definition: StarSystem.h:118
const SystemPath & GetPath() const
Definition: StarSystem.h:49
bool GetUnexplored() const
Definition: StarSystem.h:85
SystemPath GetPathOf(const SystemBody *sbody) const
Definition: StarSystem.cpp:211
unsigned GetNumStars() const
Definition: StarSystem.h:54
const IterationProxy< const std::vector< SystemBody * > > GetSpaceStations() const
Definition: StarSystem.h:67
void MakeShortDescription()
Definition: StarSystem.cpp:299
void ExportToLua(const char *filename)
Definition: StarSystem.cpp:488
ExplorationState
Definition: StarSystem.h:35
@ eUNEXPLORED
Definition: StarSystem.h:36
static const Color starColors[]
Definition: StarSystem.h:57
Uint32 GetNumBodies() const
Definition: StarSystem.h:70
const vector3f & GetPosition() const
Definition: StarSystem.h:50
const std::string & GetShortDescription() const
Definition: StarSystem.h:52
static const Color starRealColors[]
Definition: StarSystem.h:58
fixed GetIndustrial() const
Definition: StarSystem.h:91
const SysPolit & GetSysPolit() const
Definition: StarSystem.h:55
RefCountedPtr< SystemBody > GetRootBody()
Definition: StarSystem.h:63
static RefCountedPtr< StarSystem > FromJson(RefCountedPtr< Galaxy > galaxy, const Json &jsonObj)
Definition: StarSystem.cpp:361
Definition: Polit.h:51
@ SUPERTYPE_STAR
Definition: SystemBody.h:77
@ SUPERTYPE_STARPORT
Definition: SystemBody.h:80
Definition: SystemBody.h:137
BodySuperType GetSuperType() const
Definition: SystemBody.cpp:379
Definition: SystemPath.h:13
Sint32 sectorZ
Definition: SystemPath.h:56
Uint32 systemIndex
Definition: SystemPath.h:57
Sint32 sectorX
Definition: SystemPath.h:54
Sint32 sectorY
Definition: SystemPath.h:55
uint32_t CommodityId
Definition: Economy.h:29
uint32_t EconomyId
Definition: Economy.h:31
Definition: Color.h:66