@Override public void process(GeneratingRegion region) { SurfaceHeightFacet facet = new SurfaceHeightFacet(region.getRegion(), region.getBorderForFacet(SurfaceHeightFacet.class)); for (BaseVector2i pos : facet.getRelativeRegion().contents()) { facet.set(pos, height); } region.setRegionFacet(SurfaceHeightFacet.class, facet); } }
@Override public void process(GeneratingRegion region) { SurfaceHeightFacet facet = region.getRegionFacet(SurfaceHeightFacet.class); float[] mountainData = mountainNoise.noise(facet.getWorldRegion()); float[] hillData = hillNoise.noise(facet.getWorldRegion()); SurfaceTemperatureFacet temperatureData = region.getRegionFacet(SurfaceTemperatureFacet.class); SurfaceHumidityFacet humidityData = region.getRegionFacet(SurfaceHumidityFacet.class); float[] heightData = facet.getInternal(); Iterator<BaseVector2i> positionIterator = facet.getRelativeRegion().contents().iterator(); for (int i = 0; i < heightData.length; ++i) { BaseVector2i pos = positionIterator.next(); float temp = temperatureData.get(pos); float tempHumid = temp * humidityData.get(pos); Vector2f distanceToMountainBiome = new Vector2f(temp - 0.25f, tempHumid - 0.35f); float mIntens = TeraMath.clamp(1.0f - distanceToMountainBiome.length() * 3.0f); float densityMountains = Math.max(mountainData[i] * 2.12f, 0) * mIntens * configuration.mountainAmplitude; float densityHills = Math.max(hillData[i] * 2.12f - 0.1f, 0) * (1.0f - mIntens) * configuration.hillAmplitude; heightData[i] = heightData[i] + 1024 * densityMountains + 128 * densityHills; } }
@Override public void process(GeneratingRegion region) { // Create our surface height facet (we will get into borders later) Border3D border = region.getBorderForFacet(SurfaceHeightFacet.class); SurfaceHeightFacet facet = new SurfaceHeightFacet(region.getRegion(), border); // loop through every position on our 2d array Rect2i processRegion = facet.getWorldRegion(); for (BaseVector2i position : processRegion.contents()) { facet.setWorld(position, surfaceNoise.noise(position.x(), position.y()) * 20); } // give our newly created and populated facet to the region region.setRegionFacet(SurfaceHeightFacet.class, facet); } }
@Override public void process(GeneratingRegion region) { Region3i reg = region.getRegion(); Rect2i rc = Rect2i.createFromMinAndMax(reg.minX(), reg.minZ(), reg.maxX(), reg.maxZ()); if (rc.distanceSquared(centerPos.x(), centerPos.y()) <= outerRadius * outerRadius) { SurfaceHeightFacet facet = region.getRegionFacet(SurfaceHeightFacet.class); // update the surface height for (BaseVector2i pos : facet.getWorldRegion().contents()) { float originalValue = facet.getWorld(pos); int distSq = pos.distanceSquared(centerPos); if (distSq <= innerRadius * innerRadius) { facet.setWorld(pos, targetHeight); } else if (distSq <= outerRadius * outerRadius) { double dist = pos.distance(centerPos) - innerRadius; float norm = (float) dist / (outerRadius - innerRadius); facet.setWorld(pos, TeraMath.lerp(targetHeight, originalValue, norm)); } } } } }
SurfaceHeightFacet facet = new SurfaceHeightFacet(region.getRegion(), border); for (BaseVector2i pos : facet.getWorldRegion().contents()) { int xzScale = configuration.terrainScale;
@Override public void process(GeneratingRegion region) { SurfaceHeightFacet surfaceHeight = region.getRegionFacet(SurfaceHeightFacet.class); DensityFacet facet = new DensityFacet(region.getRegion(), region.getBorderForFacet(DensityFacet.class)); Region3i area = region.getRegion(); Rect2i rect = Rect2i.createFromMinAndMax(facet.getRelativeRegion().minX(), facet.getRelativeRegion().minZ(), facet.getRelativeRegion().maxX(), facet.getRelativeRegion().maxZ()); for (BaseVector2i pos : rect.contents()) { float height = surfaceHeight.get(pos); for (int y = facet.getRelativeRegion().minY(); y <= facet.getRelativeRegion().maxY(); ++y) { facet.set(pos.x(), y, pos.y(), height - area.minY() - y); } } region.setRegionFacet(DensityFacet.class, facet); } }
for (BaseVector2i pos : biomeFacet.getRelativeRegion().contents()) { float temp = temperatureFacet.get(pos); float hum = temp * humidityFacet.get(pos);
for (BaseVector2i chunkPos : chunks.contents()) { Chunk chunk = new ChunkImpl(chunkPos.getX(), 0, chunkPos.getY(), blockManager, biomeManager, extraDataManager) { @Override
@Before public void setup() { parent.addZone(new Zone("Medium sky", new LayeredZoneRegionFunction(new MinMaxLayerThickness(100, 100), MEDIUM_SKY))) .addZone(new Zone("Low sky", new LayeredZoneRegionFunction(new MinMaxLayerThickness(100, 100), LOW_SKY))) .addZone(new Zone("Above ground", new LayeredZoneRegionFunction(new MinMaxLayerThickness(100, 100), ABOVE_GROUND))) .addZone(new Zone("Ground", new LayeredZoneRegionFunction(new MinMaxLayerThickness(100, 100), GROUND))) .addZone(new Zone("Shallow underground", new LayeredZoneRegionFunction(new MinMaxLayerThickness(100, 100), SHALLOW_UNDERGROUND))) .addZone(new Zone("Medium underground", new LayeredZoneRegionFunction(new MinMaxLayerThickness(100, 100), MEDIUM_UNDERGROUND))); parent.setSeed(12345); parent.initialize(); ListMultimap<Class<? extends WorldFacet>, FacetProvider> facetProviderChains = ArrayListMultimap.create(); facetProviderChains.put(SurfaceHeightFacet.class, (generatingRegion) -> { SurfaceHeightFacet facet = new SurfaceHeightFacet(generatingRegion.getRegion(), generatingRegion.getBorderForFacet(SurfaceHeightFacet.class)); for (BaseVector2i pos : facet.getRelativeRegion().contents()) { facet.set(pos, 100); } generatingRegion.setRegionFacet(SurfaceHeightFacet.class, facet); }); Map<Class<? extends WorldFacet>, Border3D> borders = new HashMap<>(); borders.put(SurfaceHeightFacet.class, new Border3D(0, 0, 0)); region = new RegionImpl(Region3i.createFromCenterExtents(new Vector3i(0, 0, 0), 4), facetProviderChains, borders); }