fix strata depth calculation (mistake introduced in 0.0.8)
This commit is contained in:
parent
d63e14acaf
commit
bb6263dfb8
@ -0,0 +1,76 @@
|
|||||||
|
package com.terraforged.core.util.points;
|
||||||
|
|
||||||
|
import com.terraforged.core.cell.Cell;
|
||||||
|
import com.terraforged.core.region.Region;
|
||||||
|
import me.dags.noise.Module;
|
||||||
|
import me.dags.noise.Source;
|
||||||
|
import me.dags.noise.util.Vec2i;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
|
public class Poisson {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Region region = new Region(0, 0, 5, 2);
|
||||||
|
BufferedImage image = new BufferedImage(region.getBlockSize().size, region.getBlockSize().size, BufferedImage.TYPE_INT_RGB);
|
||||||
|
points(region, 123,8, 20F, 0.8F);
|
||||||
|
render(region, image);
|
||||||
|
|
||||||
|
JFrame frame = new JFrame();
|
||||||
|
frame.add(new JLabel(new ImageIcon(image)));
|
||||||
|
frame.pack();
|
||||||
|
frame.setVisible(true);
|
||||||
|
frame.setResizable(false);
|
||||||
|
frame.setLocationRelativeTo(null);
|
||||||
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void points(Region region, int seed, int scale, float radius, float threshold) {
|
||||||
|
region.generate(chunk -> chunk.generate((cell, dx, dz) -> {}));
|
||||||
|
|
||||||
|
Module noise = Source.simplex(seed, scale, 1);
|
||||||
|
|
||||||
|
int gridSize = (int) Math.ceil(region.getBlockSize().size / radius);
|
||||||
|
Vec2i[][] grid = new Vec2i[gridSize][gridSize];
|
||||||
|
|
||||||
|
for (int dz = 0; dz < region.getBlockSize().size; dz++) {
|
||||||
|
for (int dx = 0; dx < region.getBlockSize().size; dx++) {
|
||||||
|
int x = region.getBlockX() + dx;
|
||||||
|
int z = region.getBlockZ() + dz;
|
||||||
|
float value = noise.getValue(x, z);
|
||||||
|
region.getCell(dx, dz).value = value;
|
||||||
|
if (true) continue;
|
||||||
|
|
||||||
|
if (value > threshold) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int gridX = (int) (dx / radius);
|
||||||
|
int gridZ = (int) (dz / radius);
|
||||||
|
Vec2i point = grid[gridZ][gridX];
|
||||||
|
|
||||||
|
if (point != null) {
|
||||||
|
Cell<?> current = region.getCell(point.x, point.y);
|
||||||
|
if (current.value > value) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
region.getCell(dx, dz).value = value;
|
||||||
|
grid[gridZ][gridX] = new Vec2i(dx, dz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void render(Region region, BufferedImage image) {
|
||||||
|
region.iterate((cell, dx, dz) -> {
|
||||||
|
if (cell.value == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int w = (int) (cell.value * 255);
|
||||||
|
image.setRGB(dx, dz, new Color(w, w, w).getRGB());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -56,7 +56,7 @@ public class Strata<T> {
|
|||||||
int py = y;
|
int py = y;
|
||||||
T last = null;
|
T last = null;
|
||||||
for (int i = 0; i < strata.size(); i++) {
|
for (int i = 0; i < strata.size(); i++) {
|
||||||
float depth = buffer.get(i);
|
float depth = buffer.getDepth(i);
|
||||||
int height = NoiseUtil.round(depth * y);
|
int height = NoiseUtil.round(depth * y);
|
||||||
T value = strata.get(i).getValue();
|
T value = strata.get(i).getValue();
|
||||||
last = value;
|
last = value;
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
package com.terraforged.mod.feature;
|
package com.terraforged.mod.feature;
|
||||||
|
|
||||||
import com.terraforged.api.material.state.States;
|
import com.terraforged.api.material.state.States;
|
||||||
import com.terraforged.core.cell.Cell;
|
|
||||||
import com.terraforged.core.region.chunk.ChunkReader;
|
import com.terraforged.core.region.chunk.ChunkReader;
|
||||||
import it.unimi.dsi.fastutil.longs.LongIterator;
|
import it.unimi.dsi.fastutil.longs.LongIterator;
|
||||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||||
@ -140,10 +139,6 @@ public class TerrainHelper {
|
|||||||
|
|
||||||
private void flatten(IChunk chunk, ChunkReader reader, MutableBoundingBox bounds, BlockPos.Mutable pos, int dx, int dz, int level, int surface, int borderRadius) {
|
private void flatten(IChunk chunk, ChunkReader reader, MutableBoundingBox bounds, BlockPos.Mutable pos, int dx, int dz, int level, int surface, int borderRadius) {
|
||||||
if (pos.getX() >= bounds.minX && pos.getX() <= bounds.maxX && pos.getZ() >= bounds.minZ && pos.getZ() <= bounds.maxZ) {
|
if (pos.getX() >= bounds.minX && pos.getX() <= bounds.maxX && pos.getZ() >= bounds.minZ && pos.getZ() <= bounds.maxZ) {
|
||||||
Cell<?> cell = reader.getCell(dx, dz);
|
|
||||||
cell.steepness = 0F;
|
|
||||||
cell.sediment = 0F;
|
|
||||||
cell.erosion = 0F;
|
|
||||||
for (int dy = level + 1; dy <= surface; dy++) {
|
for (int dy = level + 1; dy <= surface; dy++) {
|
||||||
chunk.setBlockState(pos.setPos(dx, dy, dz), Blocks.AIR.getDefaultState(), false);
|
chunk.setBlockState(pos.setPos(dx, dy, dz), Blocks.AIR.getDefaultState(), false);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
mod_version=0.0.8
|
mod_version=0.0.9
|
||||||
mc_version=1.15.2
|
mc_version=1.15.2
|
||||||
forge_version=31.1.1
|
forge_version=31.1.1
|
||||||
mcp_channel=snapshot
|
mcp_channel=snapshot
|
||||||
|
Loading…
Reference in New Issue
Block a user