implement ExtrusionColumn

This commit is contained in:
dfsek
2022-06-10 18:18:31 -07:00
parent 37d98df8c3
commit d71b1ca984
2 changed files with 85 additions and 0 deletions

View File

@@ -1,8 +1,10 @@
package com.dfsek.terra.addons.biome.extrusion;
import com.dfsek.terra.addons.biome.extrusion.api.Extrusion;
import com.dfsek.terra.api.util.Column;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.info.WorldProperties;
import java.util.List;
import java.util.Set;
@@ -37,4 +39,13 @@ public class BiomeExtrusionProvider implements BiomeProvider {
public Iterable<Biome> getBiomes() {
return biomes;
}
public int getResolution() {
return resolution;
}
@Override
public Column<Biome> getColumn(int x, int z, WorldProperties properties) {
return new ExtrusionColumn(properties, this, x, z);
}
}

View File

@@ -0,0 +1,74 @@
package com.dfsek.terra.addons.biome.extrusion;
import com.dfsek.terra.api.util.Column;
import com.dfsek.terra.api.util.function.IntIntObjConsumer;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.info.WorldProperties;
public class ExtrusionColumn implements Column<Biome> {
private final int min;
private final int max;
private final BiomeExtrusionProvider provider;
private final int x, z;
private final long seed;
public ExtrusionColumn(WorldProperties worldProperties, BiomeExtrusionProvider provider, int x, int z) {
this.min = worldProperties.getMinHeight();
this.max = worldProperties.getMaxHeight();
this.provider = provider;
this.x = x;
this.z = z;
this.seed = worldProperties.getSeed();
}
@Override
public int getMinY() {
return min;
}
@Override
public int getMaxY() {
return max;
}
@Override
public int getX() {
return x;
}
@Override
public int getZ() {
return z;
}
@Override
public Biome get(int y) {
return provider.getBiome(x, y, z, seed);
}
@Override
public void forRanges(IntIntObjConsumer<Biome> consumer) {
int min = getMinY();
int y = min;
Biome runningObj = get(y);
int runningMin = min;
int max = getMaxY() - 1;
while(y < max) {
y += provider.getResolution();
Biome current = get(y);
if(!current.equals(runningObj)) {
consumer.accept(runningMin, y, runningObj);
runningMin = y;
runningObj = current;
}
}
consumer.accept(runningMin, ++y, runningObj);
}
}