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

Method flush

source/game/StarDungeonGenerator.cpp:1176–1278  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1174 }
1175
1176 void DungeonGeneratorWriter::flush() {
1177 auto geometry = m_facade->getWorldGeometry();
1178 auto displace = [&](Vec2I pos) -> Vec2I { return geometry.xwrap(pos); };
1179 auto displaceF = [&](Vec2F pos) -> Vec2F { return geometry.xwrap(pos); };
1180
1181 PolyF::VertexList terrainBlendingVertexes;
1182 PolyF::VertexList spaceBlendingVertexes;
1183 for (auto bb : m_boundingBoxes) {
1184 m_facade->markRegion(bb);
1185
1186 if (m_terrainMarkingSurfaceLevel) {
1187 // Mark the regions of the dungeon above the dungeon surface as needing
1188 // space, and the regions below the surface as needing terrain
1189 if (bb.yMin() < *m_terrainMarkingSurfaceLevel) {
1190 RectI lower = bb;
1191 lower.setYMax(min(lower.yMax(), *m_terrainMarkingSurfaceLevel));
1192 terrainBlendingVertexes.append(Vec2F(lower.xMin(), lower.yMin()));
1193 terrainBlendingVertexes.append(Vec2F(lower.xMax(), lower.yMin()));
1194 terrainBlendingVertexes.append(Vec2F(lower.xMin(), lower.yMax()));
1195 terrainBlendingVertexes.append(Vec2F(lower.xMax(), lower.yMax()));
1196 }
1197
1198 if (bb.yMax() > *m_terrainMarkingSurfaceLevel) {
1199 RectI upper = bb;
1200 upper.setYMin(max(upper.yMin(), *m_terrainMarkingSurfaceLevel));
1201 spaceBlendingVertexes.append(Vec2F(upper.xMin(), upper.yMin()));
1202 spaceBlendingVertexes.append(Vec2F(upper.xMax(), upper.yMin()));
1203 spaceBlendingVertexes.append(Vec2F(upper.xMin(), upper.yMax() + m_terrainSurfaceSpaceExtends.value(0)));
1204 spaceBlendingVertexes.append(Vec2F(upper.xMax(), upper.yMax() + m_terrainSurfaceSpaceExtends.value(0)));
1205 }
1206 }
1207 }
1208
1209 if (!terrainBlendingVertexes.empty())
1210 m_facade->markTerrain(PolyF::convexHull(terrainBlendingVertexes));
1211 if (!spaceBlendingVertexes.empty())
1212 m_facade->markSpace(PolyF::convexHull(spaceBlendingVertexes));
1213
1214 for (auto iter = m_backgroundMaterial.begin(); iter != m_backgroundMaterial.end(); iter++)
1215 m_facade->setBackgroundMaterial(displace(iter->first), iter->second.material, iter->second.hueshift, iter->second.colorVariant);
1216 for (auto iter = m_foregroundMaterial.begin(); iter != m_foregroundMaterial.end(); iter++)
1217 m_facade->setForegroundMaterial(displace(iter->first), iter->second.material, iter->second.hueshift, iter->second.colorVariant);
1218 for (auto iter = m_foregroundMod.begin(); iter != m_foregroundMod.end(); iter++)
1219 m_facade->setForegroundMod(displace(iter->first), iter->second.mod, iter->second.hueshift);
1220 for (auto iter = m_backgroundMod.begin(); iter != m_backgroundMod.end(); iter++)
1221 m_facade->setBackgroundMod(displace(iter->first), iter->second.mod, iter->second.hueshift);
1222
1223 List<Vec2I> sortedPositions = m_objects.keys();
1224 sortByComputedValue(sortedPositions, [](Vec2I pos) { return pos[1] + pos[0] / 1000.0f; });
1225 for (auto pos : sortedPositions) {
1226 auto& object = m_objects[pos];
1227 m_facade->placeObject(displace(pos), object.objectName, object.direction, object.parameters);
1228 }
1229
1230 for (auto entry : m_vehicles) {
1231 String vehicleName;
1232 Json parameters;
1233 tie(vehicleName, parameters) = entry.second;

Callers 3

updateMethod · 0.45
buildDungeonMethod · 0.45

Calls 15

sortByComputedValueFunction · 0.85
getWorldGeometryMethod · 0.80
markRegionMethod · 0.80
yMinMethod · 0.80
setYMaxMethod · 0.80
yMaxMethod · 0.80
xMinMethod · 0.80
xMaxMethod · 0.80
setYMinMethod · 0.80
markTerrainMethod · 0.80
markSpaceMethod · 0.80
connectWireGroupMethod · 0.80

Tested by

no test coverage detected