v1.4.4
This commit is contained in:
commit
9c94d113d3
10260 changed files with 1237388 additions and 0 deletions
207
source/game/StarWorldTemplate.hpp
Normal file
207
source/game/StarWorldTemplate.hpp
Normal file
|
@ -0,0 +1,207 @@
|
|||
#ifndef STAR_WORLD_TEMPLATE_HPP
|
||||
#define STAR_WORLD_TEMPLATE_HPP
|
||||
|
||||
#include "StarOrderedMap.hpp"
|
||||
#include "StarLruCache.hpp"
|
||||
#include "StarWorldLayout.hpp"
|
||||
#include "StarBiomePlacement.hpp"
|
||||
#include "StarCelestialDatabase.hpp"
|
||||
#include "StarSkyParameters.hpp"
|
||||
#include "StarAmbient.hpp"
|
||||
|
||||
namespace Star {
|
||||
|
||||
STAR_CLASS(WorldTemplate);
|
||||
|
||||
// Reference object that describes the generation of a single world, and all
|
||||
// of the world metadata. Meant to remain static (or relatively static)
|
||||
// throughout the life of a World.
|
||||
class WorldTemplate {
|
||||
public:
|
||||
struct Dungeon {
|
||||
String dungeon;
|
||||
int baseHeight;
|
||||
int baseX;
|
||||
int xVariance;
|
||||
bool force;
|
||||
bool blendWithTerrain;
|
||||
};
|
||||
|
||||
struct BlockInfo {
|
||||
BiomeIndex blockBiomeIndex = NullBiomeIndex;
|
||||
BiomeIndex environmentBiomeIndex = NullBiomeIndex;
|
||||
|
||||
bool biomeTransition = false;
|
||||
|
||||
bool terrain = false;
|
||||
bool foregroundCave = false;
|
||||
bool backgroundCave = false;
|
||||
|
||||
MaterialId foreground = EmptyMaterialId;
|
||||
ModId foregroundMod = NoModId;
|
||||
|
||||
MaterialId background = EmptyMaterialId;
|
||||
ModId backgroundMod = NoModId;
|
||||
|
||||
LiquidId caveLiquid = EmptyLiquidId;
|
||||
float caveLiquidSeedDensity = 0.0f;
|
||||
|
||||
LiquidId oceanLiquid = EmptyLiquidId;
|
||||
int oceanLiquidLevel = 0;
|
||||
|
||||
bool encloseLiquids = false;
|
||||
bool fillMicrodungeons = false;
|
||||
};
|
||||
|
||||
struct PotentialBiomeItems {
|
||||
// Potential items that would spawn at the given block assuming it is at
|
||||
// the surface.
|
||||
List<BiomeItemPlacement> surfaceBiomeItems;
|
||||
// ... Or on a cave surface.
|
||||
List<BiomeItemPlacement> caveSurfaceBiomeItems;
|
||||
// ... Or on a cave ceiling.
|
||||
List<BiomeItemPlacement> caveCeilingBiomeItems;
|
||||
// ... Or on a cave background wall.
|
||||
List<BiomeItemPlacement> caveBackgroundBiomeItems;
|
||||
// ... Or in the ocean
|
||||
List<BiomeItemPlacement> oceanItems;
|
||||
};
|
||||
|
||||
// Creates a blank world with the given size
|
||||
WorldTemplate(Vec2U const& size);
|
||||
// Creates a world from the given visitable celestial object.
|
||||
WorldTemplate(CelestialCoordinate const& celestialCoordinate, CelestialDatabasePtr const& celestialDatabase);
|
||||
// Creates a world from a bare VisitableWorldParameters structure
|
||||
WorldTemplate(VisitableWorldParametersConstPtr const& worldParameters, SkyParameters const& skyParameters, uint64_t seed);
|
||||
// Load a world template from the given stored data.
|
||||
WorldTemplate(Json const& store);
|
||||
|
||||
Json store() const;
|
||||
|
||||
Maybe<CelestialParameters> const& celestialParameters() const;
|
||||
VisitableWorldParametersConstPtr worldParameters() const;
|
||||
SkyParameters skyParameters() const;
|
||||
WorldLayoutPtr worldLayout() const;
|
||||
|
||||
void setWorldParameters(VisitableWorldParametersPtr newParameters);
|
||||
void setWorldLayout(WorldLayoutPtr newLayout);
|
||||
void setSkyParameters(SkyParameters newParameters);
|
||||
|
||||
uint64_t worldSeed() const;
|
||||
String worldName() const;
|
||||
|
||||
Vec2U size() const;
|
||||
|
||||
// The average (ish) surface level for this world, off of which terrain
|
||||
// generators modify the surface height.
|
||||
float surfaceLevel() const;
|
||||
|
||||
// The constant height at which everything below is considered "underground"
|
||||
float undergroundLevel() const;
|
||||
|
||||
// returns true if the world is terrestrial and the specified position is within the
|
||||
// planet's surface layer
|
||||
bool inSurfaceLayer(Vec2I const& position) const;
|
||||
|
||||
// If it is specified, searches the player start search region for an
|
||||
// acceptable player start area. The block returned will be an empty block
|
||||
// above a terrain block, in a region of free space. If no such block can be
|
||||
// found or the player start search region is not specified, returns nothing.
|
||||
Maybe<Vec2I> findSensiblePlayerStart() const;
|
||||
|
||||
// Add either a solid region hint or a space region hint for the given
|
||||
// polygonal region. Blending size and weighting is configured in the
|
||||
// WorldTemplate config file.
|
||||
void addCustomTerrainRegion(PolyF poly);
|
||||
void addCustomSpaceRegion(PolyF poly);
|
||||
void clearCustomTerrains();
|
||||
|
||||
List<RectI> previewAddBiomeRegion(Vec2I const& position, int width);
|
||||
List<RectI> previewExpandBiomeRegion(Vec2I const& position, int newWidth);
|
||||
|
||||
void addBiomeRegion(Vec2I const& position, String const& biomeName, String const& subBlockSelector, int width);
|
||||
void expandBiomeRegion(Vec2I const& position, int newWidth);
|
||||
|
||||
List<Dungeon> dungeons() const;
|
||||
|
||||
// Is this tile block naturally outside the terrain?
|
||||
bool isOutside(int x, int y) const;
|
||||
// Is this integral region of blocks outside the terrain?
|
||||
bool isOutside(RectI const& region) const;
|
||||
|
||||
BlockInfo blockInfo(int x, int y) const;
|
||||
|
||||
// partial blockinfo that doesn't use terrain selectors
|
||||
BlockInfo blockBiomeInfo(int x, int y) const;
|
||||
|
||||
BiomeIndex blockBiomeIndex(int x, int y) const;
|
||||
BiomeIndex environmentBiomeIndex(int x, int y) const;
|
||||
BiomeConstPtr biome(BiomeIndex biomeIndex) const;
|
||||
|
||||
BiomeConstPtr blockBiome(int x, int y) const;
|
||||
BiomeConstPtr environmentBiome(int x, int y) const;
|
||||
|
||||
MaterialId biomeMaterial(BiomeIndex biomeIndex, int x, int y) const;
|
||||
|
||||
// Returns the material and mod hue shift that should be applied to the given
|
||||
// material and mod for this biome.
|
||||
MaterialHue biomeMaterialHueShift(BiomeIndex biomeIndex, MaterialId material) const;
|
||||
MaterialHue biomeModHueShift(BiomeIndex biomeIndex, ModId mod) const;
|
||||
|
||||
AmbientNoisesDescriptionPtr ambientNoises(int x, int y) const;
|
||||
AmbientNoisesDescriptionPtr musicTrack(int x, int y) const;
|
||||
|
||||
StringList environmentStatusEffects(int x, int y) const;
|
||||
bool breathable(int x, int y) const;
|
||||
|
||||
WeatherPool weathers() const;
|
||||
|
||||
// Return potential items that would spawn at the given block.
|
||||
void addPotentialBiomeItems(int x, int y, PotentialBiomeItems& items, List<BiomeItemDistribution> const& distributions, BiomePlacementArea area, Maybe<BiomePlacementMode> mode = {}) const;
|
||||
PotentialBiomeItems potentialBiomeItemsAt(int x, int y) const;
|
||||
|
||||
// Return only the potential items that can spawn at the given block.
|
||||
List<BiomeItemPlacement> validBiomeItems(int x, int y, PotentialBiomeItems potentialBiomeItems) const;
|
||||
|
||||
float gravity() const;
|
||||
float threatLevel() const;
|
||||
|
||||
// For consistently seeding object generation at this position
|
||||
uint64_t seedFor(int x, int y) const;
|
||||
|
||||
private:
|
||||
struct CustomTerrainRegion {
|
||||
PolyF region;
|
||||
RectF regionBounds;
|
||||
bool solid;
|
||||
};
|
||||
|
||||
WorldTemplate();
|
||||
|
||||
void determineWorldName();
|
||||
|
||||
pair<float, float> customTerrainWeighting(int x, int y) const;
|
||||
|
||||
// Calculates block info and adds to cache
|
||||
BlockInfo getBlockInfo(uint32_t x, uint32_t y) const;
|
||||
|
||||
Json m_templateConfig;
|
||||
float m_customTerrainBlendSize;
|
||||
float m_customTerrainBlendWeight;
|
||||
|
||||
Maybe<CelestialParameters> m_celestialParameters;
|
||||
VisitableWorldParametersConstPtr m_worldParameters;
|
||||
SkyParameters m_skyParameters;
|
||||
uint64_t m_seed;
|
||||
WorldGeometry m_geometry;
|
||||
WorldLayoutPtr m_layout;
|
||||
String m_worldName;
|
||||
|
||||
List<CustomTerrainRegion> m_customTerrainRegions;
|
||||
|
||||
mutable HashLruCache<Vector<uint32_t, 2>, BlockInfo> m_blockCache;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue