Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(JOML): migrate remaining module #20

Merged
merged 1 commit into from
Jan 24, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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