implement padded grid distributor

This commit is contained in:
dfsek
2021-12-28 17:46:40 -07:00
parent ecc4504f00
commit 36d417d3db
3 changed files with 64 additions and 0 deletions

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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;
}
}