mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-15 21:31:05 +00:00
short-circuit locators
This commit is contained in:
+1
-7
@@ -27,13 +27,7 @@ public class AdjacentPatternLocator implements Locator {
|
||||
|
||||
@Override
|
||||
public BinaryColumn getSuitableCoordinates(Column<?> column) {
|
||||
BinaryColumn locations = new BinaryColumn(search);
|
||||
|
||||
for(int y : search) {
|
||||
if(isValid(y, column)) locations.set(y);
|
||||
}
|
||||
|
||||
return locations;
|
||||
return new BinaryColumn(search, y -> isValid(y, column));
|
||||
}
|
||||
|
||||
private boolean isValid(int y, Column<?> column) {
|
||||
|
||||
+3
-2
@@ -11,6 +11,7 @@ import com.dfsek.terra.api.structure.feature.BinaryColumn;
|
||||
import com.dfsek.terra.api.structure.feature.Locator;
|
||||
import com.dfsek.terra.api.util.Range;
|
||||
import com.dfsek.terra.api.world.chunk.generation.util.Column;
|
||||
import com.dfsek.terra.api.world.chunk.generation.util.Column.BinaryColumnBuilder;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
@@ -44,13 +45,13 @@ public class GaussianRandomLocator implements Locator {
|
||||
int size = points.get(r);
|
||||
|
||||
|
||||
BinaryColumn results = new BinaryColumn(column.getMinY(), column.getMaxY());
|
||||
BinaryColumnBuilder results = column.newBinaryColumn();
|
||||
for(int i = 0; i < size; i++) {
|
||||
int h = (int) r.nextGaussian(mean, standardDeviation);
|
||||
if(h >= column.getMaxY() || h < column.getMinY()) continue;
|
||||
results.set(h);
|
||||
}
|
||||
|
||||
return results;
|
||||
return results.build();
|
||||
}
|
||||
}
|
||||
|
||||
+1
-7
@@ -25,12 +25,6 @@ public class PatternLocator implements Locator {
|
||||
|
||||
@Override
|
||||
public BinaryColumn getSuitableCoordinates(Column<?> column) {
|
||||
BinaryColumn locations = new BinaryColumn(column.getMinY(), column.getMaxY());
|
||||
|
||||
for(int y : search) {
|
||||
if(pattern.matches(y, column)) locations.set(y);
|
||||
}
|
||||
|
||||
return locations;
|
||||
return new BinaryColumn(column.getMinY(), column.getMaxY(), y -> pattern.matches(y, column));
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -13,6 +13,7 @@ import com.dfsek.terra.api.structure.feature.BinaryColumn;
|
||||
import com.dfsek.terra.api.structure.feature.Locator;
|
||||
import com.dfsek.terra.api.util.Range;
|
||||
import com.dfsek.terra.api.world.chunk.generation.util.Column;
|
||||
import com.dfsek.terra.api.world.chunk.generation.util.Column.BinaryColumnBuilder;
|
||||
|
||||
|
||||
public class RandomLocator implements Locator {
|
||||
@@ -39,13 +40,13 @@ public class RandomLocator implements Locator {
|
||||
|
||||
int size = points.get(r);
|
||||
|
||||
BinaryColumn results = new BinaryColumn(column.getMinY(), column.getMaxY());
|
||||
BinaryColumnBuilder results = column.newBinaryColumn();
|
||||
for(int i = 0; i < size; i++) {
|
||||
int h = height.get(r);
|
||||
if(h >= column.getMaxY() || h < column.getMinY()) continue;
|
||||
results.set(h);
|
||||
}
|
||||
|
||||
return results;
|
||||
return results.build();
|
||||
}
|
||||
}
|
||||
|
||||
+1
-5
@@ -22,13 +22,9 @@ public class Sampler3DLocator implements Locator {
|
||||
|
||||
@Override
|
||||
public BinaryColumn getSuitableCoordinates(Column<?> column) {
|
||||
BinaryColumn results = column.newBinaryColumn();
|
||||
long seed = column.getWorld().getSeed();
|
||||
int x = column.getX();
|
||||
int z = column.getZ();
|
||||
column.forEach(y -> {
|
||||
if(sampler.noise(seed, x, y, z) > 0) results.set(y);
|
||||
});
|
||||
return results;
|
||||
return column.newBinaryColumn(y -> sampler.noise(seed, x, y, z) > 0);
|
||||
}
|
||||
}
|
||||
|
||||
+4
-2
@@ -7,6 +7,8 @@
|
||||
|
||||
package com.dfsek.terra.addons.feature.locator.locators;
|
||||
|
||||
import com.dfsek.terra.api.world.chunk.generation.util.Column.BinaryColumnBuilder;
|
||||
|
||||
import net.jafama.FastMath;
|
||||
|
||||
import java.util.List;
|
||||
@@ -26,7 +28,7 @@ public class SamplerLocator implements Locator {
|
||||
|
||||
@Override
|
||||
public BinaryColumn getSuitableCoordinates(Column<?> column) {
|
||||
BinaryColumn results = new BinaryColumn(column.getMinY(), column.getMaxY());
|
||||
BinaryColumnBuilder results = column.newBinaryColumn();
|
||||
|
||||
long seed = column.getWorld().getSeed();
|
||||
samplers.forEach(sampler -> {
|
||||
@@ -35,6 +37,6 @@ public class SamplerLocator implements Locator {
|
||||
results.set(y);
|
||||
});
|
||||
|
||||
return results;
|
||||
return results.build();
|
||||
}
|
||||
}
|
||||
|
||||
+4
-3
@@ -11,6 +11,7 @@ import com.dfsek.terra.api.structure.feature.BinaryColumn;
|
||||
import com.dfsek.terra.api.structure.feature.Locator;
|
||||
import com.dfsek.terra.api.util.Range;
|
||||
import com.dfsek.terra.api.world.chunk.generation.util.Column;
|
||||
import com.dfsek.terra.api.world.chunk.generation.util.Column.BinaryColumnBuilder;
|
||||
|
||||
|
||||
public class SurfaceLocator implements Locator {
|
||||
@@ -22,12 +23,12 @@ public class SurfaceLocator implements Locator {
|
||||
|
||||
@Override
|
||||
public BinaryColumn getSuitableCoordinates(Column<?> column) {
|
||||
BinaryColumn location = new BinaryColumn(column.getMinY(), column.getMaxY());
|
||||
BinaryColumnBuilder builder = column.newBinaryColumn();
|
||||
for(int y : search) {
|
||||
if(column.getBlock(y).isAir() && !column.getBlock(y - 1).isAir()) {
|
||||
location.set(y);
|
||||
builder.set(y);
|
||||
}
|
||||
}
|
||||
return location;
|
||||
return builder.build();
|
||||
}
|
||||
}
|
||||
|
||||
+2
-4
@@ -22,13 +22,11 @@ public class TopLocator implements Locator {
|
||||
|
||||
@Override
|
||||
public BinaryColumn getSuitableCoordinates(Column<?> column) {
|
||||
BinaryColumn location = new BinaryColumn(column.getMinY(), column.getMaxY());
|
||||
for(int y : search) {
|
||||
if(column.getBlock(y).isAir() && !column.getBlock(y - 1).isAir()) {
|
||||
location.set(y);
|
||||
return location;
|
||||
return new BinaryColumn(y, y+1, yi -> true);
|
||||
}
|
||||
}
|
||||
return location;
|
||||
return BinaryColumn.getNull();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user