Skip to content

Commit

Permalink
Merge pull request #20 from Terasology/joml/migrate
Browse files Browse the repository at this point in the history
feat(JOML): migrate remaining module
  • Loading branch information
pollend authored Jan 24, 2021
2 parents 34eac57 + 5cfaf4f commit 938163f
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 52 deletions.
21 changes: 11 additions & 10 deletions src/main/java/org/terasology/MineSweeper/generator/MineField.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -35,33 +36,33 @@ public enum Type{

private Set<Vector3i> mines = new HashSet<>();

private Set<Vector3i> getNeighbors(Vector3i pos) {
private Set<Vector3i> getNeighbors(Vector3ic pos) {
Set<Vector3i> 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));
}
}

public Set<Vector3i> 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++;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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) {

Expand All @@ -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)) {
Expand All @@ -76,24 +77,18 @@ 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);
}
}
}
}







// for (Iterator<Vector3i> it = facet.getWorldRegion().iterator(); it.hasNext(); ) {
// Vector3i p = it.next();
// if(seedNoiseGen.noise(p.x,p.y,p.z) > .99f){
Expand All @@ -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++)
// {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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() {
Expand All @@ -50,18 +49,20 @@ public void generateChunk(CoreChunk chunk, Region chunkRegion) {

MineFieldFacet mineFieldFacet = chunkRegion.getFacet(MineFieldFacet.class);
for (Map.Entry<Vector3ic, MineField> 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)));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -44,31 +44,31 @@ private Set<Vector3i> 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);
}

Expand Down

0 comments on commit 938163f

Please sign in to comment.