Search in sources :

Example 16 with SurfaceHeightFacet

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));
            }
        }
    }
}
Also used : Rect2i(org.terasology.math.geom.Rect2i) SurfaceHeightFacet(org.terasology.world.generation.facets.SurfaceHeightFacet) BaseVector2i(org.terasology.math.geom.BaseVector2i) Region3i(org.terasology.math.Region3i)

Example 17 with SurfaceHeightFacet

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);
            }
        }
    }
}
Also used : SurfaceHeightFacet(org.terasology.world.generation.facets.SurfaceHeightFacet) Vector3i(org.terasology.math.geom.Vector3i) LiquidData(org.terasology.world.liquid.LiquidData)

Aggregations

SurfaceHeightFacet (org.terasology.world.generation.facets.SurfaceHeightFacet)17 BaseVector2i (org.terasology.math.geom.BaseVector2i)9 Border3D (org.terasology.world.generation.Border3D)6 SeaLevelFacet (org.terasology.world.generation.facets.SeaLevelFacet)5 BiomeFacet (org.terasology.core.world.generator.facets.BiomeFacet)4 Rect2i (org.terasology.math.geom.Rect2i)4 Vector3i (org.terasology.math.geom.Vector3i)4 Predicate (com.google.common.base.Predicate)3 Region3i (org.terasology.math.Region3i)3 DensityFacet (org.terasology.world.generation.facets.DensityFacet)2 SurfaceHumidityFacet (org.terasology.world.generation.facets.SurfaceHumidityFacet)2 SurfaceTemperatureFacet (org.terasology.world.generation.facets.SurfaceTemperatureFacet)2 LiquidData (org.terasology.world.liquid.LiquidData)2 HashMap (java.util.HashMap)1 Before (org.junit.Before)1 CoreBiome (org.terasology.core.world.CoreBiome)1 FloraFacet (org.terasology.core.world.generator.facets.FloraFacet)1 TreeFacet (org.terasology.core.world.generator.facets.TreeFacet)1 SpiralIterable (org.terasology.math.geom.SpiralIterable)1 Vector2f (org.terasology.math.geom.Vector2f)1