mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-18 14:50:56 +00:00
create GaussianRandomLocator
This commit is contained in:
+52
@@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020-2021 Polyhedral Development
|
||||||
|
*
|
||||||
|
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
|
||||||
|
* reference the LICENSE file in this module's root directory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.dfsek.terra.addons.feature.locator.locators;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
|
||||||
|
public class GaussianRandomLocator implements Locator {
|
||||||
|
private final double mean;
|
||||||
|
|
||||||
|
private final Range points;
|
||||||
|
|
||||||
|
private final double standardDeviation;
|
||||||
|
|
||||||
|
|
||||||
|
public GaussianRandomLocator(Range height, Range points, double standardDeviation) {
|
||||||
|
this.mean = (height.getMax() + height.getMin()) / 2.0;
|
||||||
|
this.points = points;
|
||||||
|
this.standardDeviation = standardDeviation;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BinaryColumn getSuitableCoordinates(Column<?> column) {
|
||||||
|
long seed = column.getWorld().getSeed();
|
||||||
|
seed = 31 * seed + column.getX();
|
||||||
|
seed = 31 * seed + column.getZ();
|
||||||
|
|
||||||
|
Random r = new Random(seed);
|
||||||
|
|
||||||
|
int size = points.get(r);
|
||||||
|
|
||||||
|
|
||||||
|
BinaryColumn results = new BinaryColumn(column.getMinY(), column.getMaxY());
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user