diff --git a/src/main/java/org/terasology/MineSweeper/generator/MineField.java b/src/main/java/org/terasology/MineSweeper/generator/MineField.java index 8dccd4e..f64fa68 100644 --- a/src/main/java/org/terasology/MineSweeper/generator/MineField.java +++ b/src/main/java/org/terasology/MineSweeper/generator/MineField.java @@ -15,8 +15,9 @@ */ package org.terasology.MineSweeper.generator; -import org.terasology.math.Region3i; -import org.terasology.math.geom.Vector3i; +import org.joml.Vector3i; +import org.joml.Vector3ic; +import org.terasology.world.block.BlockRegion; import java.util.Collections; import java.util.HashSet; @@ -35,19 +36,19 @@ public enum Type{ private Set mines = new HashSet<>(); - private Set getNeighbors(Vector3i pos) { + private Set getNeighbors(Vector3ic pos) { Set neighbors = new HashSet<>(); - for (Vector3i neighbor : Region3i.createFromCenterExtents(pos, 1)) { - neighbors.add(neighbor); + for (Vector3ic neighbor : new BlockRegion(pos).expand(1,1,1)) { + neighbors.add(new Vector3i(neighbor)); } return neighbors; } - public void addMines(Vector3i mine) { + public void addMines(Vector3ic mine) { if(getNeighbors(mine).stream().allMatch(neighbor -> getNumberOfNeighbors(neighbor) < 16)) { - this.mines.add(mine); + this.mines.add(new Vector3i(mine)); } } @@ -55,13 +56,13 @@ public Set getMines() { return Collections.unmodifiableSet(mines); } - public boolean hasMine(Vector3i relativePos) { + public boolean hasMine(Vector3ic relativePos) { return mines.contains(relativePos); } - public int getNumberOfNeighbors(Vector3i pos) { + public int getNumberOfNeighbors(Vector3ic pos) { int count = 0; - for (Vector3i current : Region3i.createFromCenterExtents(pos, 1)) { + for (Vector3ic current : new BlockRegion(pos).expand(1,1,1)) { if (mines.contains(current)) { count++; } diff --git a/src/main/java/org/terasology/MineSweeper/generator/MineFieldFacet.java b/src/main/java/org/terasology/MineSweeper/generator/MineFieldFacet.java index cf38a42..5acad36 100644 --- a/src/main/java/org/terasology/MineSweeper/generator/MineFieldFacet.java +++ b/src/main/java/org/terasology/MineSweeper/generator/MineFieldFacet.java @@ -15,7 +15,6 @@ */ package org.terasology.MineSweeper.generator; -import org.terasology.math.Region3i; import org.terasology.world.block.BlockRegion; import org.terasology.world.generation.Border3D; import org.terasology.world.generation.facets.base.SparseObjectFacet3D; diff --git a/src/main/java/org/terasology/MineSweeper/generator/MineFieldFacetProvider.java b/src/main/java/org/terasology/MineSweeper/generator/MineFieldFacetProvider.java index 9ed1901..23a11ff 100644 --- a/src/main/java/org/terasology/MineSweeper/generator/MineFieldFacetProvider.java +++ b/src/main/java/org/terasology/MineSweeper/generator/MineFieldFacetProvider.java @@ -15,8 +15,8 @@ */ package org.terasology.MineSweeper.generator; +import org.joml.Vector3i; import org.terasology.customOreGen.PDist; -import org.terasology.math.geom.Vector3i; import org.terasology.utilities.procedural.Noise; import org.terasology.utilities.procedural.SimplexNoise; import org.terasology.utilities.random.FastRandom; @@ -38,9 +38,10 @@ @Requires(@Facet(value = SurfacesFacet.class, border = @FacetBorder(sides = 30, bottom = 30, top = 30))) @Produces(MineFieldFacet.class) public class MineFieldFacetProvider implements FacetProviderPlugin { - private long seed; + private long seed; private Noise noise; + @Override public void setSeed(long seed) { @@ -56,14 +57,14 @@ public void initialize() { @Override public void process(GeneratingRegion region) { - Border3D border = region.getBorderForFacet(MineFieldFacet.class).extendBy(30,30,30); - final MineFieldFacet facet = new MineFieldFacet(region.getRegion(),border); + Border3D border = region.getBorderForFacet(MineFieldFacet.class).extendBy(30, 30, 30); + final MineFieldFacet facet = new MineFieldFacet(region.getRegion(), border); final SurfacesFacet surfacesFacet = region.getRegionFacet(SurfacesFacet.class); - PDist size = new PDist(50,30); - PDist distance = new PDist(0,5); - PDist frequency = new PDist(2,1); + PDist size = new PDist(50, 30); + PDist distance = new PDist(0, 5); + PDist frequency = new PDist(2, 1); for (int x = surfacesFacet.getWorldRegion().minX(); x <= surfacesFacet.getWorldRegion().maxX(); x++) { for (int z = surfacesFacet.getWorldRegion().minZ(); z <= surfacesFacet.getWorldRegion().maxZ(); z++) { for (int surfaceHeight : surfacesFacet.getWorldColumn(x, z)) { @@ -76,11 +77,11 @@ public void process(GeneratingRegion region) { int sizeOfField = size.getIntValue(random); for (int y = 0; y < sizeOfField; y++) { - mineField.addMines(new Vector3i(new Vector3i( + mineField.addMines(new Vector3i( (int) (Math.cos(random.nextFloat() * Math.PI * 2.0f) * distance.getValue(random)), (int) (Math.cos(random.nextFloat() * Math.PI * 2.0f) * distance.getValue(random)), (int) (Math.cos(random.nextFloat() * Math.PI * 2.0f) * distance.getValue(random)) - ))); + )); } facet.setWorld(x, surfaceHeight, z, mineField); } @@ -88,12 +89,6 @@ public void process(GeneratingRegion region) { } } - - - - - - // for (Iterator it = facet.getWorldRegion().iterator(); it.hasNext(); ) { // Vector3i p = it.next(); // if(seedNoiseGen.noise(p.x,p.y,p.z) > .99f){ @@ -107,7 +102,8 @@ public void process(GeneratingRegion region) { // PDist distance = new PDist(0,5); // PDist frequency = new PDist(2,1); // -// Random random = ChunkRandom.getChunkRandom(seed, ChunkMath.calcChunkPos(region.getRegion().center()), 17832181); +// Random random = ChunkRandom.getChunkRandom(seed, ChunkMath.calcChunkPos(region.getRegion().center()), +// 17832181); // int numberOfFields = frequency.getIntValue(random); // for(int x = 0;x < numberOfFields; x++) // { diff --git a/src/main/java/org/terasology/MineSweeper/generator/MineRasterizer.java b/src/main/java/org/terasology/MineSweeper/generator/MineRasterizer.java index 0660a44..a903d5b 100644 --- a/src/main/java/org/terasology/MineSweeper/generator/MineRasterizer.java +++ b/src/main/java/org/terasology/MineSweeper/generator/MineRasterizer.java @@ -15,14 +15,13 @@ */ package org.terasology.MineSweeper.generator; +import org.joml.Vector3i; import org.joml.Vector3ic; import org.terasology.MineSweeper.blocks.SweeperFamily; -import org.terasology.math.ChunkMath; -import org.terasology.math.JomlUtil; -import org.terasology.math.Region3i; -import org.terasology.math.geom.Vector3i; import org.terasology.registry.CoreRegistry; import org.terasology.world.block.BlockManager; +import org.terasology.world.block.BlockRegion; +import org.terasology.world.chunks.Chunks; import org.terasology.world.chunks.CoreChunk; import org.terasology.world.generation.Region; import org.terasology.world.generation.WorldRasterizer; @@ -35,7 +34,7 @@ * Created by michaelpollind on 8/28/16. */ @RegisterPlugin -public class MineRasterizer implements WorldRasterizer, WorldRasterizerPlugin { +public class MineRasterizer implements WorldRasterizer, WorldRasterizerPlugin { @Override public void initialize() { @@ -50,18 +49,20 @@ public void generateChunk(CoreChunk chunk, Region chunkRegion) { MineFieldFacet mineFieldFacet = chunkRegion.getFacet(MineFieldFacet.class); for (Map.Entry entry : mineFieldFacet.getWorldEntries().entrySet()) { - Vector3i center = new Vector3i(JomlUtil.from(entry.getKey())); + Vector3i center = new Vector3i(entry.getKey()); MineField field = entry.getValue(); - for (Vector3i pos : field.getMines()) { + for (org.joml.Vector3i pos : field.getMines()) { Vector3i minePos = new Vector3i(center).add(pos); - if (chunk.getRegion().contains(JomlUtil.from(minePos))) { - chunk.setBlock(ChunkMath.calcRelativeBlockPos(minePos), mine.getBlockForNumberOfNeighbors((byte) field.getNumberOfNeighbors(pos))); + if (chunk.getRegion().contains(minePos)) { + chunk.setBlock(Chunks.toRelative(minePos, minePos), + mine.getBlockForNumberOfNeighbors((byte) field.getNumberOfNeighbors(pos))); } - for (Vector3i current : Region3i.createFromCenterExtents(pos, 1)) { + for (Vector3ic current : new BlockRegion(pos).expand(1, 1, 1)) { Vector3i counterPos = new Vector3i(center).add(current); - if (!field.hasMine(current) && chunk.getRegion().contains(JomlUtil.from(counterPos))) { - chunk.setBlock(ChunkMath.calcRelativeBlockPos(counterPos), counterFamily.getBlockForNumberOfNeighbors((byte) field.getNumberOfNeighbors(current))); + if (!field.hasMine(current) && chunk.getRegion().contains(counterPos)) { + chunk.setBlock(Chunks.toRelative(counterPos, counterPos), + counterFamily.getBlockForNumberOfNeighbors((byte) field.getNumberOfNeighbors(current))); } } } diff --git a/src/test/java/org/terasology/MineSweeper/generator/MineFieldTest.java b/src/test/java/org/terasology/MineSweeper/generator/MineFieldTest.java index e37af38..7290c1c 100644 --- a/src/test/java/org/terasology/MineSweeper/generator/MineFieldTest.java +++ b/src/test/java/org/terasology/MineSweeper/generator/MineFieldTest.java @@ -15,8 +15,8 @@ */ package org.terasology.MineSweeper.generator; +import org.joml.Vector3i; import org.junit.Test; -import org.terasology.math.geom.Vector3i; import java.util.HashSet; import java.util.Set; @@ -44,31 +44,31 @@ private Set getNeighbors(Vector3i pos) { public void getNumberOfNeighbors() throws Exception { MineField mineField = new MineField(); - mineField.addMines(Vector3i.zero()); - mineField.addMines(Vector3i.up()); - mineField.addMines(Vector3i.west()); - mineField.addMines(Vector3i.east()); - mineField.addMines(Vector3i.down()); - mineField.addMines(Vector3i.north()); - mineField.addMines(Vector3i.south()); - mineField.addMines(Vector3i.one()); + mineField.addMines(new Vector3i(0,0,0)); + mineField.addMines(new Vector3i(0,1, 0)); + mineField.addMines(new Vector3i(1,0,0)); + mineField.addMines(new Vector3i(-1,0,0)); + mineField.addMines(new Vector3i(0,-1,0)); + mineField.addMines(new Vector3i(0,0,1)); + mineField.addMines(new Vector3i(0,0,-1)); + mineField.addMines(new Vector3i(1,1,1)); - assertEquals(8, mineField.getNumberOfNeighbors(Vector3i.zero())); + assertEquals(8, mineField.getNumberOfNeighbors(new Vector3i(0,0,0))); } @Test public void addMines() throws Exception { MineField mineField = new MineField(); - for (Vector3i mine : getNeighbors(Vector3i.one())) { + for (Vector3i mine : getNeighbors(new Vector3i(1,1,1))) { mineField.addMines(mine); } - for (Vector3i mine : getNeighbors(Vector3i.zero())) { + for (Vector3i mine : getNeighbors(new Vector3i(0,0,0))) { mineField.addMines(mine); } - for (Vector3i mine : getNeighbors(Vector3i.north())) { + for (Vector3i mine : getNeighbors(new Vector3i(0,0,1))) { mineField.addMines(mine); }