use of org.terasology.world.generation.facets.SurfaceHeightFacet in project Terasology by MovingBlocks.
the class PlateauProvider method process.
@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));
}
}
}
}
use of org.terasology.world.generation.facets.SurfaceHeightFacet in project Terasology by MovingBlocks.
the class GroundRasterizer method generateChunk.
@Override
public void generateChunk(CoreChunk chunk, Region chunkRegion) {
LiquidData waterLiquid = new LiquidData(LiquidType.WATER, LiquidData.MAX_LIQUID_DEPTH);
SurfaceHeightFacet surfaceHeightData = chunkRegion.getFacet(SurfaceHeightFacet.class);
Vector3i chunkOffset = chunk.getChunkWorldOffset();
for (int x = 0; x < chunk.getChunkSizeX(); ++x) {
for (int z = 0; z < chunk.getChunkSizeZ(); ++z) {
float surfaceHeight = surfaceHeightData.get(x, z);
int y;
for (y = 0; y < chunk.getChunkSizeY() && y + chunkOffset.y < surfaceHeight; ++y) {
chunk.setBlock(x, y, z, stone);
}
for (; y < chunk.getChunkSizeY() && y + chunkOffset.y <= 32; ++y) {
chunk.setBlock(x, y, z, water);
chunk.setLiquid(x, y, z, waterLiquid);
}
}
}
}
Aggregations