MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / drawWorld

Method drawWorld

source/game/StarCelestialGraphics.cpp:24–135  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

22}
23
24List<pair<String, float>> CelestialGraphics::drawWorld(
25 CelestialParameters const& celestialParameters, Maybe<CelestialParameters> const& overrideShadowParameters) {
26 auto& root = Root::singleton();
27 auto assets = root.assets();
28 auto liquidsDatabase = root.liquidsDatabase();
29
30 CelestialParameters shadowParameters = overrideShadowParameters.value(celestialParameters);
31
32 String type = celestialParameters.getParameter("worldType").toString();
33
34 List<pair<String, float>> layers;
35
36 if (type == "Terrestrial") {
37 auto terrestrialParameters = as<TerrestrialWorldParameters>(celestialParameters.visitableParameters());
38 if (!terrestrialParameters)
39 return {};
40
41 auto gfxConfig = jsonMerge(assets->json("/celestial.config:terrestrialGraphics").get("default"),
42 assets->json("/celestial.config:terrestrialGraphics").get(terrestrialParameters->typeName, JsonObject()));
43
44 auto liquidImages = gfxConfig.getString("liquidImages", "");
45 auto baseImages = gfxConfig.getString("baseImages", "");
46 auto shadowImages = gfxConfig.getString("shadowImages", "");
47 auto baseCount = gfxConfig.getInt("baseCount", 0);
48 auto dynamicsImages = gfxConfig.getString("dynamicsImages", "");
49 float imageScale = celestialParameters.getParameter("imageScale", 1.0f).toFloat();
50
51 // If the planet has water, then draw the corresponding water image as the
52 // base layer, otherwise use the bottom most mask image.
53 if (terrestrialParameters->primarySurfaceLiquid != EmptyLiquidId && !liquidImages.empty()) {
54 String liquidBaseImage = liquidImages.replace("<liquid>", liquidsDatabase->liquidName(terrestrialParameters->primarySurfaceLiquid));
55 layers.append({std::move(liquidBaseImage), imageScale});
56 } else {
57 if (baseCount > 0) {
58 String baseLayer = strf("{}?hueshift={}", baseImages.replace("<biome>",
59 terrestrialParameters->primaryBiome).replace("<num>", toString(baseCount)), terrestrialParameters->hueShift);
60 layers.append({std::move(baseLayer), imageScale});
61 }
62 }
63
64 // Then draw all the biome layers
65 for (int i = 0; i < baseCount; ++i) {
66 String baseImage = baseImages.replace("<num>", toString(baseCount - i));
67 String hueShiftString, dynamicMaskString;
68 if (!dynamicsImages.empty())
69 dynamicMaskString = "?addmask=" + dynamicsImages.replace("<num>", toString(celestialParameters.randomizeParameterRange(gfxConfig.getArray("dynamicsRange"), i).toInt()));
70 if (terrestrialParameters->hueShift != 0)
71 hueShiftString = strf("?hueshift={}", terrestrialParameters->hueShift);
72 String layer = baseImage + hueShiftString + dynamicMaskString;
73 layers.append({std::move(layer), imageScale});
74 }
75
76 if (!shadowImages.empty()) {
77 String shadow = shadowImages.replace("<num>", toString(shadowParameters.randomizeParameterRange(gfxConfig.getArray("shadowNumber")).toInt()));
78 layers.append({std::move(shadow), imageScale});
79 }
80
81 } else if (type == "Asteroids") {

Callers

nothing calls this directly

Calls 15

singletonClass · 0.85
strfFunction · 0.85
toStringFunction · 0.85
assetsMethod · 0.80
liquidsDatabaseMethod · 0.80
getParameterMethod · 0.80
visitableParametersMethod · 0.80
jsonMethod · 0.80
getStringMethod · 0.80
getIntMethod · 0.80
toFloatMethod · 0.80
liquidNameMethod · 0.80

Tested by

no test coverage detected