Pioneer
Loading...
Searching...
No Matches
CustomSystem.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 _CUSTOMSYSTEM_H
5#define _CUSTOMSYSTEM_H
6
7#include "Color.h"
8#include "Polit.h"
9#include "JsonFwd.h"
10#include "galaxy/SystemBody.h"
11
12#include "fixed.h"
13#include "vector3.h"
14
15class Faction;
16class Galaxy;
17
19public:
25 };
26
29
31 // TODO: these two are separate implementations to handle Lua/Json based systems
32 std::vector<CustomSystemBody *> children;
33 std::vector<uint32_t> childIndicies;
34
35 // TODO: these are only to be used for Lua system generation
41
42 void SanityChecks();
43};
44
46public:
47
48 static const int CUSTOM_ONLY_RADIUS = 4;
51
52 std::string name;
53 std::vector<std::string> other_names;
54 uint64_t nameHash;
55
57 // TODO: this holds system body objects when loaded from Json
58 // This depends on serialized body order being exactly the same as
59 // depth-first hierarchy traversal order.
60 // Otherwise, subtle inconsistencies and outright wrong random generation
61 // will creep in.
62 // The fix is to fully deprecate the depth-first traversal order and
63 // "flatten" StarSystemCustomGenerator::CustomGetKidsOf
64 // TODO: this should act as storage for all bodies instead of holding ptrs
65 std::vector<CustomSystemBody *> bodies;
67 unsigned numStars;
71 Uint32 seed;
72 // NOTE: these are only intended to be used for Lua system generation
79 fixed lawlessness; // 0.0 = lawful, 1.0 = totally lawless
80 std::string shortDesc;
81 std::string longDesc;
82
83 void SanityChecks();
84
85 bool IsRandom() const { return !sBody; }
86
87 void LoadFromJson(const Json &systemdef);
88 void SaveToJson(Json &obj);
89};
90
92public:
93 CustomSystemsDatabase(Galaxy *galaxy, const std::string &customSysDir) :
94 m_galaxy(galaxy),
95 m_customSysDirectory(customSysDir) {}
97
98 void Load();
99
100
101 void LoadAllLuaSystems();
102 const CustomSystem *LoadSystem(std::string_view filepath);
103
104 CustomSystem *LoadSystemFromJSON(std::string_view filename, const Json &systemdef, bool mergeWithGalaxy = true);
105
106 typedef std::vector<const CustomSystem *> SystemList;
107 // XXX this is not as const-safe as it should be
108 const SystemList &GetCustomSystemsForSector(int sectorX, int sectorY, int sectorZ) const;
109 void AddCustomSystem(const SystemPath &path, CustomSystem *csys);
110 Galaxy *GetGalaxy() const { return m_galaxy; }
111
113
114private:
115 typedef std::map<SystemPath, SystemList> SectorMap;
116 typedef std::pair<SystemPath, size_t> SystemIndex;
117
118 lua_State *CreateLoaderState();
119
120 Galaxy *const m_galaxy;
121 const std::string m_customSysDirectory;
122 SectorMap m_sectorMap;
123 SystemIndex m_lastAddedSystem;
124 static const SystemList s_emptySystemList; // see: Null Object pattern
125};
126
127#endif /* _CUSTOMSYSTEM_H */
nlohmann::json Json
Definition: Json.h:8
Definition: CustomSystem.h:18
SystemBodyData bodyData
Definition: CustomSystem.h:30
RingStatus
Definition: CustomSystem.h:20
@ WANT_RANDOM_RINGS
Definition: CustomSystem.h:21
@ WANT_RINGS
Definition: CustomSystem.h:22
@ WANT_CUSTOM_RINGS
Definition: CustomSystem.h:24
@ WANT_NO_RINGS
Definition: CustomSystem.h:23
CustomSystemBody()
Definition: CustomSystem.cpp:1081
RingStatus ringStatus
Definition: CustomSystem.h:40
std::vector< CustomSystemBody * > children
Definition: CustomSystem.h:32
~CustomSystemBody()
Definition: CustomSystem.cpp:1090
std::vector< uint32_t > childIndicies
Definition: CustomSystem.h:33
bool want_rand_arg_periapsis
Definition: CustomSystem.h:38
bool want_rand_offset
Definition: CustomSystem.h:36
void SanityChecks()
Definition: CustomSystem.cpp:1137
bool want_rand_phase
Definition: CustomSystem.h:37
bool want_rand_seed
Definition: CustomSystem.h:39
Definition: CustomSystem.h:45
CustomSystemBody * sBody
Definition: CustomSystem.h:56
std::vector< std::string > other_names
Definition: CustomSystem.h:53
std::string name
Definition: CustomSystem.h:52
bool IsRandom() const
Definition: CustomSystem.h:85
static const int CUSTOM_ONLY_RADIUS
Definition: CustomSystem.h:48
int sectorZ
Definition: CustomSystem.h:68
bool want_rand_explored
Definition: CustomSystem.h:74
bool want_rand_lawlessness
Definition: CustomSystem.h:78
Uint32 seed
Definition: CustomSystem.h:71
std::string shortDesc
Definition: CustomSystem.h:80
void SaveToJson(Json &obj)
Definition: CustomSystem.cpp:670
int sectorY
Definition: CustomSystem.h:68
Uint32 systemIndex
Definition: CustomSystem.h:69
const Faction * faction
Definition: CustomSystem.h:76
CustomSystem()
Definition: CustomSystem.cpp:1053
std::vector< CustomSystemBody * > bodies
Definition: CustomSystem.h:65
Polit::GovType govType
Definition: CustomSystem.h:77
bool want_rand_seed
Definition: CustomSystem.h:73
fixed lawlessness
Definition: CustomSystem.h:79
unsigned numStars
Definition: CustomSystem.h:67
void LoadFromJson(const Json &systemdef)
Definition: CustomSystem.cpp:626
int sectorX
Definition: CustomSystem.h:68
bool explored
Definition: CustomSystem.h:75
SystemBody::BodyType primaryType[4]
Definition: CustomSystem.h:66
~CustomSystem()
Definition: CustomSystem.cpp:1068
void SanityChecks()
Definition: CustomSystem.cpp:1073
uint64_t nameHash
Definition: CustomSystem.h:54
vector3f pos
Definition: CustomSystem.h:70
std::string longDesc
Definition: CustomSystem.h:81
Definition: CustomSystem.h:91
~CustomSystemsDatabase()
Definition: CustomSystem.cpp:938
const CustomSystem * LoadSystem(std::string_view filepath)
Definition: CustomSystem.cpp:815
CustomSystem * LoadSystemFromJSON(std::string_view filename, const Json &systemdef, bool mergeWithGalaxy=true)
Definition: CustomSystem.cpp:837
Galaxy * GetGalaxy() const
Definition: CustomSystem.h:110
void AddCustomSystem(const SystemPath &path, CustomSystem *csys)
Definition: CustomSystem.cpp:956
void RunLuaSystemSanityChecks(CustomSystem *csys)
Definition: CustomSystem.cpp:989
const SystemList & GetCustomSystemsForSector(int sectorX, int sectorY, int sectorZ) const
Definition: CustomSystem.cpp:949
void Load()
Definition: CustomSystem.cpp:759
void LoadAllLuaSystems()
Definition: CustomSystem.cpp:799
CustomSystemsDatabase(Galaxy *galaxy, const std::string &customSysDir)
Definition: CustomSystem.h:93
std::vector< const CustomSystem * > SystemList
Definition: CustomSystem.h:106
Definition: Factions.h:21
Definition: Galaxy.h:18
Definition: SectorMap.h:23
Definition: SystemBody.h:89
BodyType
Definition: SystemBody.h:25
Definition: SystemPath.h:13
GovType
Definition: Polit.h:25