mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-16 22:01:07 +00:00
implement padded grid distributor
This commit is contained in:
+2
@@ -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.AndDistributorTemplate;
|
||||||
import com.dfsek.terra.addons.feature.distributor.config.NoDistributorTemplate;
|
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.SamplerDistributorTemplate;
|
||||||
import com.dfsek.terra.addons.feature.distributor.config.OrDistributorTemplate;
|
import com.dfsek.terra.addons.feature.distributor.config.OrDistributorTemplate;
|
||||||
import com.dfsek.terra.addons.feature.distributor.config.PointSetDistributorTemplate;
|
import com.dfsek.terra.addons.feature.distributor.config.PointSetDistributorTemplate;
|
||||||
@@ -49,6 +50,7 @@ public class DistributorAddon implements AddonInitializer {
|
|||||||
DISTRIBUTOR_TOKEN);
|
DISTRIBUTOR_TOKEN);
|
||||||
distributorRegistry.register(addon.key("SAMPLER"), SamplerDistributorTemplate::new);
|
distributorRegistry.register(addon.key("SAMPLER"), SamplerDistributorTemplate::new);
|
||||||
distributorRegistry.register(addon.key("POINTS"), PointSetDistributorTemplate::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("AND"), AndDistributorTemplate::new);
|
||||||
distributorRegistry.register(addon.key("OR"), OrDistributorTemplate::new);
|
distributorRegistry.register(addon.key("OR"), OrDistributorTemplate::new);
|
||||||
distributorRegistry.register(addon.key("YES"), YesDistributorTemplate::new);
|
distributorRegistry.register(addon.key("YES"), YesDistributorTemplate::new);
|
||||||
|
|||||||
+25
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
+37
@@ -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