52 static constexpr double RADIUS = 5000.0;
62 enum class SectorKind : uint32_t {
73 uint8_t cellSize[2] = {1, 1};
75 float rarityAirless = 0;
78 SectorKind buildingKind = SectorKind::None;
84 struct CityRadiusDef {
85 double population = 0.0;
88 float randomSize = 0.0;
92 struct CityFlavourType {
93 std::string flavourName;
94 std::vector<CityRadiusDef> sizeDefs;
95 std::vector<BuildingType> buildingTypes;
103 void SetGridOccupancy(uint32_t x, uint32_t y,
const uint8_t size[2]);
104 bool TestGridOccupancy(uint32_t x, uint32_t y,
const uint8_t size[2]);
109 inline bool TestGridQuick(uint32_t x, uint32_t y)
const
112 return m_gridBitset[y * m_gridPitch + x / 8] & (1 << (x & 7));
115 void AddStaticGeomsToCollisionSpace();
116 void RemoveStaticGeomsFromCollisionSpace();
118 struct BuildingInstance {
130 double m_cityDensity;
136 std::vector<BuildingInstance> m_buildings;
137 std::vector<BuildingInstance> m_enabledBuildings;
138 std::vector<Uint32> m_buildingCounts;
141 std::unique_ptr<uint8_t[]> m_gridBitset;
143 uint32_t m_gridPitch;
151 CityFlavourType *m_cityType;
157 static std::vector<CityFlavourType> s_cityFlavours;
159 static std::unique_ptr<Graphics::Material> s_debugMat;
162 static void LoadBuildingType(std::string_view key,
const Json &buildingDef, BuildingType &out);
163 static void GetModelSize(
const Aabb &aabb, uint8_t size[2]);
nlohmann::json Json
Definition: Json.h:8
Definition: CityOnPlanet.h:37
static void Init()
Definition: CityOnPlanet.cpp:230
static constexpr double RADIUS
Definition: CityOnPlanet.h:52
static constexpr uint32_t CELLMAX
Definition: CityOnPlanet.h:56
static void Uninit()
Definition: CityOnPlanet.cpp:263
static constexpr uint32_t CELLSIZE
Definition: CityOnPlanet.h:54
float GetClipRadius() const
Definition: CityOnPlanet.h:45
static constexpr uint32_t CELLMASK
Definition: CityOnPlanet.h:57
virtual ~CityOnPlanet()
Definition: CityOnPlanet.cpp:297
static void SetCityModelPatterns(const SystemPath &path)
Definition: CityOnPlanet.cpp:273
void Render(Graphics::Renderer *r, const Graphics::Frustum &camera, const SpaceStation *station, const vector3d &viewCoords, const matrix4x4d &viewTransform)
Definition: CityOnPlanet.cpp:643
Planet * GetPlanet() const
Definition: CityOnPlanet.h:44
Definition: FileSystem.h:78
Definition: Renderer.h:45
Definition: Animation.h:19
Definition: SpaceStation.h:30
Definition: SystemBody.h:137
Definition: SystemPath.h:13
Definition: CityOnPlanet.h:28
Definition: Background.h:14
Definition: CityOnPlanet.h:32