begin work on terrain samplers

This commit is contained in:
dfsek
2021-04-15 09:52:51 -07:00
parent 798f3423a5
commit 54e6fb0587
7 changed files with 121 additions and 2 deletions
@@ -2,6 +2,9 @@ package com.dfsek.terra.api.world.biome;
import com.dfsek.terra.api.math.noise.NoiseSampler;
import com.dfsek.terra.api.world.palette.Palette;
import com.dfsek.terra.world.generation.math.samplers.terrain.TerrainSampler;
import java.util.List;
public interface Generator {
/**
@@ -41,4 +44,6 @@ public interface Generator {
double getElevationWeight();
int getBlendStep();
List<TerrainSampler> getTerrainSamplers();
}
@@ -4,6 +4,10 @@ import com.dfsek.terra.api.math.noise.NoiseSampler;
import com.dfsek.terra.api.world.biome.Generator;
import com.dfsek.terra.api.world.palette.Palette;
import com.dfsek.terra.api.world.palette.holder.PaletteHolder;
import com.dfsek.terra.world.generation.math.samplers.terrain.TerrainSampler;
import java.util.Collections;
import java.util.List;
public class WorldGenerator implements Generator {
@SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"})
@@ -85,6 +89,11 @@ public class WorldGenerator implements Generator {
return blendStep;
}
@Override
public List<TerrainSampler> getTerrainSamplers() {
return Collections.emptyList();
}
public Palette getSlantPalette(int y) {
return slantPalettes.getPalette(y);
}
@@ -0,0 +1,22 @@
package com.dfsek.terra.world.generation.math.samplers.terrain;
import com.dfsek.paralithic.Expression;
import com.dfsek.terra.world.generation.math.interpolation.Interpolator3;
public class ExpressionSampler implements TerrainSampler {
private final Expression expression;
public ExpressionSampler(Expression expression) {
this.expression = expression;
}
@Override
public Interpolator3 sample(double x, double y, double z) {
return (i, i1, i2) -> expression.evaluate(x, y, z);
}
@Override
public int getXResolution() {
return 1;
}
}
@@ -0,0 +1,31 @@
package com.dfsek.terra.world.generation.math.samplers.terrain;
import com.dfsek.terra.world.generation.math.interpolation.Interpolator3;
public class InterpolatedSampler implements TerrainSampler {
private final InterpolatorSupplier supplier;
public InterpolatedSampler(InterpolatorSupplier supplier) {
this.supplier = supplier;
}
@Override
public Interpolator3 sample(double x, double y, double z) {
return null;
}
@Override
public int getXResolution() {
return supplier.getXResolution();
}
@Override
public int getYResolution() {
return supplier.getYResolution();
}
@Override
public int getZResolution() {
return supplier.getZResolution();
}
}
@@ -0,0 +1,19 @@
package com.dfsek.terra.world.generation.math.samplers.terrain;
import com.dfsek.terra.world.generation.math.interpolation.Interpolator2;
import com.dfsek.terra.world.generation.math.interpolation.Interpolator3;
import java.util.function.Supplier;
public interface InterpolatorSupplier {
int getXResolution();
int getYResolution();
int getZResolution();
Interpolator2 get(double t, double v0, double v1);
Interpolator3 get(double _000, double _100,
double _010, double _110,
double _001, double _101,
double _011, double _111);
}
@@ -0,0 +1,22 @@
package com.dfsek.terra.world.generation.math.samplers.terrain;
import com.dfsek.terra.world.generation.math.interpolation.Interpolator2;
import com.dfsek.terra.world.generation.math.interpolation.Interpolator3;
public interface TerrainSampler {
Interpolator3 sample(double x, double y, double z);
default Interpolator2 sample(double x, double z) {
return (s, t) -> sample(x, 0, z).interpolate(s, 0, t);
}
int getXResolution();
default int getYResolution() {
return getXResolution();
}
default int getZResolution() {
return getXResolution();
}
}