mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-02-16 10:30:42 +00:00
create GaussianRandomLocator
This commit is contained in:
@@ -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