mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-04-04 06:46:21 +00:00
implement padded grid distributor
This commit is contained in:
@@ -13,6 +13,7 @@ import java.util.function.Supplier;
|
||||
|
||||
import com.dfsek.terra.addons.feature.distributor.config.AndDistributorTemplate;
|
||||
import com.dfsek.terra.addons.feature.distributor.config.NoDistributorTemplate;
|
||||
import com.dfsek.terra.addons.feature.distributor.config.PaddedGridDistributorTemplate;
|
||||
import com.dfsek.terra.addons.feature.distributor.config.SamplerDistributorTemplate;
|
||||
import com.dfsek.terra.addons.feature.distributor.config.OrDistributorTemplate;
|
||||
import com.dfsek.terra.addons.feature.distributor.config.PointSetDistributorTemplate;
|
||||
@@ -49,6 +50,7 @@ public class DistributorAddon implements AddonInitializer {
|
||||
DISTRIBUTOR_TOKEN);
|
||||
distributorRegistry.register(addon.key("SAMPLER"), SamplerDistributorTemplate::new);
|
||||
distributorRegistry.register(addon.key("POINTS"), PointSetDistributorTemplate::new);
|
||||
distributorRegistry.register(addon.key("PADDED_GRID"), PaddedGridDistributorTemplate::new);
|
||||
distributorRegistry.register(addon.key("AND"), AndDistributorTemplate::new);
|
||||
distributorRegistry.register(addon.key("OR"), OrDistributorTemplate::new);
|
||||
distributorRegistry.register(addon.key("YES"), YesDistributorTemplate::new);
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.dfsek.terra.addons.feature.distributor.config;
|
||||
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
||||
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
||||
|
||||
import com.dfsek.terra.addons.feature.distributor.distributors.PaddedGridDistributor;
|
||||
import com.dfsek.terra.api.config.meta.Meta;
|
||||
import com.dfsek.terra.api.structure.feature.Distributor;
|
||||
|
||||
|
||||
public class PaddedGridDistributorTemplate implements ObjectTemplate<Distributor> {
|
||||
@Value("width")
|
||||
private @Meta int width;
|
||||
|
||||
@Value("padding")
|
||||
private @Meta int padding;
|
||||
|
||||
@Value("salt")
|
||||
private @Meta int salt;
|
||||
|
||||
@Override
|
||||
public Distributor get() {
|
||||
return new PaddedGridDistributor(width, padding, salt);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.dfsek.terra.addons.feature.distributor.distributors;
|
||||
|
||||
import com.dfsek.terra.api.structure.feature.Distributor;
|
||||
|
||||
import com.dfsek.terra.api.util.MathUtil;
|
||||
|
||||
import net.jafama.FastMath;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
|
||||
public class PaddedGridDistributor implements Distributor {
|
||||
private final int width;
|
||||
|
||||
private final int cellWidth;
|
||||
|
||||
private final int salt;
|
||||
|
||||
public PaddedGridDistributor(int width, int padding, int salt) {
|
||||
this.width = width;
|
||||
this.salt = salt;
|
||||
this.cellWidth = width + padding;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(int x, int z, long seed) {
|
||||
int cellX = FastMath.floorDiv(x, cellWidth);
|
||||
int cellZ = FastMath.floorDiv(z, cellWidth);
|
||||
|
||||
Random random = new Random(MathUtil.squash(cellX, cellZ) + salt);
|
||||
|
||||
int pointX = random.nextInt(width) + cellX * cellWidth;
|
||||
int pointZ = random.nextInt(width) + cellZ * cellWidth;
|
||||
|
||||
return x == pointX && z == pointZ;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user