From d9fe9207218287d46f9ba9fc092b310b12f3175d Mon Sep 17 00:00:00 2001 From: Michael Pollind Date: Thu, 31 Dec 2020 12:46:33 -0800 Subject: [PATCH] feat(JOML): migrate block networks --- .../blockNetwork/EfficientBlockNetwork.java | 6 +-- .../blockNetwork/EfficientNetwork.java | 10 ++--- .../blockNetwork/ImmutableBlockLocation.java | 19 ++++---- .../terasology/blockNetwork/NetworkNode.java | 44 ++++++++++++------- .../blockNetwork/SimpleNetwork.java | 6 +-- .../blockNetwork/BlockNetworkTest.java | 5 ++- .../EfficientBlockNetworkTest.java | 5 ++- .../blockNetwork/EfficientNetworkTest.java | 7 +-- .../blockNetwork/SimpleNetworkTest.java | 5 ++- 9 files changed, 62 insertions(+), 45 deletions(-) diff --git a/src/main/java/org/terasology/blockNetwork/EfficientBlockNetwork.java b/src/main/java/org/terasology/blockNetwork/EfficientBlockNetwork.java index 9adb346..d0c5b09 100644 --- a/src/main/java/org/terasology/blockNetwork/EfficientBlockNetwork.java +++ b/src/main/java/org/terasology/blockNetwork/EfficientBlockNetwork.java @@ -18,7 +18,7 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; -import org.terasology.math.geom.Vector3i; +import org.joml.Vector3ic; import java.util.Collection; import java.util.Collections; @@ -79,7 +79,7 @@ public void addNetworkingBlock(T networkNode, NetworkChangeReason reason) { * @param location The location to query. * @return A collection of leaf nodes at location. */ - public Collection getLeafNodesAt(Vector3i location) { + public Collection getLeafNodesAt(Vector3ic location) { return leafNodes.get(new ImmutableBlockLocation(location)); } @@ -89,7 +89,7 @@ public Collection getLeafNodesAt(Vector3i location) { * @param location The location to query. * @return A collection of leaf nodes at location. */ - public Collection getNetworkingNodesAt(Vector3i location) { + public Collection getNetworkingNodesAt(Vector3ic location) { return networkingNodes.get(new ImmutableBlockLocation(location)); } diff --git a/src/main/java/org/terasology/blockNetwork/EfficientNetwork.java b/src/main/java/org/terasology/blockNetwork/EfficientNetwork.java index 6766e67..e39cced 100644 --- a/src/main/java/org/terasology/blockNetwork/EfficientNetwork.java +++ b/src/main/java/org/terasology/blockNetwork/EfficientNetwork.java @@ -22,12 +22,12 @@ import com.google.common.collect.Maps; import com.google.common.collect.SetMultimap; import com.google.common.collect.Sets; +import org.joml.Vector3i; import org.terasology.blockNetwork.traversal.BreadthFirstTraversal; import org.terasology.blockNetwork.traversal.BreadthFirstTraversalWithPath; import org.terasology.blockNetwork.traversal.TraversalResult; import org.terasology.math.Side; import org.terasology.math.SideBitFlag; -import org.terasology.math.geom.Vector3i; import javax.annotation.Nullable; import java.util.Arrays; @@ -449,7 +449,7 @@ public byte getLeafSidesInNetwork(T networkNode) { // Degenerated network for (Side connectingOnSide : SideBitFlag.getSides(networkNode.inputSides)) { Vector3i possibleLocation = networkNode.location.toVector3i(); - possibleLocation.add(connectingOnSide.getVector3i()); + possibleLocation.add(connectingOnSide.direction()); for (NetworkNode node : leafNodes.get(new ImmutableBlockLocation(possibleLocation))) { if (SideBitFlag.hasSide(node.outputSides, connectingOnSide.reverse())) { return SideBitFlag.getSide(connectingOnSide); @@ -459,7 +459,7 @@ public byte getLeafSidesInNetwork(T networkNode) { for (Side connectingOnSide : SideBitFlag.getSides(networkNode.outputSides)) { Vector3i possibleLocation = networkNode.location.toVector3i(); - possibleLocation.add(connectingOnSide.getVector3i()); + possibleLocation.add(connectingOnSide.direction()); for (NetworkNode node : leafNodes.get(new ImmutableBlockLocation(possibleLocation))) { if (SideBitFlag.hasSide(node.inputSides, connectingOnSide.reverse())) { return SideBitFlag.getSide(connectingOnSide); @@ -472,7 +472,7 @@ public byte getLeafSidesInNetwork(T networkNode) { byte result = 0; for (Side connectingOnSide : SideBitFlag.getSides(networkNode.outputSides)) { Vector3i possibleLocation = networkNode.location.toVector3i(); - possibleLocation.add(connectingOnSide.getVector3i()); + possibleLocation.add(connectingOnSide.direction()); for (NetworkNode node : networkingNodes.get(new ImmutableBlockLocation(possibleLocation))) { if (SideBitFlag.hasSide(node.inputSides, connectingOnSide.reverse())) { result += SideBitFlag.getSide(connectingOnSide); @@ -481,7 +481,7 @@ public byte getLeafSidesInNetwork(T networkNode) { } for (Side connectingOnSide : SideBitFlag.getSides(networkNode.inputSides)) { Vector3i possibleLocation = networkNode.location.toVector3i(); - possibleLocation.add(connectingOnSide.getVector3i()); + possibleLocation.add(connectingOnSide.direction()); for (NetworkNode node : networkingNodes.get(new ImmutableBlockLocation(possibleLocation))) { if (SideBitFlag.hasSide(node.outputSides, connectingOnSide.reverse())) { result += SideBitFlag.getSide(connectingOnSide); diff --git a/src/main/java/org/terasology/blockNetwork/ImmutableBlockLocation.java b/src/main/java/org/terasology/blockNetwork/ImmutableBlockLocation.java index 22a0947..cb4b2df 100644 --- a/src/main/java/org/terasology/blockNetwork/ImmutableBlockLocation.java +++ b/src/main/java/org/terasology/blockNetwork/ImmutableBlockLocation.java @@ -15,8 +15,9 @@ */ package org.terasology.blockNetwork; +import org.joml.Vector3i; +import org.joml.Vector3ic; import org.terasology.math.Side; -import org.terasology.math.geom.Vector3i; /** * Contains a block location immutably. @@ -36,11 +37,11 @@ public class ImmutableBlockLocation { * z-coordinate of the location. */ public final int z; - - public ImmutableBlockLocation(Vector3i location) { - this(location.x, location.y, location.z); + + public ImmutableBlockLocation(Vector3ic location) { + this(location.x(), location.y(), location.z()); } - + /** * ImmutableBlockLocation constructor. * @@ -53,7 +54,7 @@ public ImmutableBlockLocation(int x, int y, int z) { this.y = y; this.z = z; } - + /** * Creates a new ImmutableBlockLocation in a relative location. * @@ -62,10 +63,10 @@ public ImmutableBlockLocation(int x, int y, int z) { * of the directionVector to y, and the z-component of the directionVector to z. */ public ImmutableBlockLocation move(Side side) { - final Vector3i directionVector = side.getVector3i(); - return new ImmutableBlockLocation(x + directionVector.x, y + directionVector.y, z + directionVector.z); + final Vector3ic directionVector = side.direction(); + return new ImmutableBlockLocation(x + directionVector.x(), y + directionVector.y(), z + directionVector.z()); } - + /** * Creates a Vector3i. * diff --git a/src/main/java/org/terasology/blockNetwork/NetworkNode.java b/src/main/java/org/terasology/blockNetwork/NetworkNode.java index 252611a..1d6146c 100644 --- a/src/main/java/org/terasology/blockNetwork/NetworkNode.java +++ b/src/main/java/org/terasology/blockNetwork/NetworkNode.java @@ -15,9 +15,9 @@ */ package org.terasology.blockNetwork; +import org.joml.Vector3ic; import org.terasology.math.Side; import org.terasology.math.SideBitFlag; -import org.terasology.math.geom.Vector3i; /** * Represents a single node in a block network. @@ -51,56 +51,68 @@ public class NetworkNode { public final byte outputSides; /** - * @deprecated Use the constructor with separate input and output sides. * @param location * @param connectionSides + * @deprecated Use the constructor with separate input and output sides. */ @Deprecated - public NetworkNode(Vector3i location, byte connectionSides) { + public NetworkNode(Vector3ic location, byte connectionSides) { this(location, connectionSides, connectionSides); } /** - * @deprecated Use the constructor with separate input and output sides. * @param location * @param sides + * @deprecated Use the constructor with separate input and output sides. */ @Deprecated - public NetworkNode(Vector3i location, Side... sides) { + public NetworkNode(Vector3ic location, Side... sides) { this(location, SideBitFlag.getSides(sides)); } /** * Creates a new node based on the given location and input/output sides. + * * @param location The location of the node * @param inputSides The sides which can be used for input * @param outputSides The sides which can be used for output - * @throws IllegalArgumentException if the input or output sides don't represent the sides of a block (i.e., they are outside of the 0-63 range) + * @throws IllegalArgumentException if the input or output sides don't represent the sides of a block (i.e., + * they are outside of the 0-63 range) */ - public NetworkNode(Vector3i location, byte inputSides, byte outputSides) { + public NetworkNode(Vector3ic location, byte inputSides, byte outputSides) { if (inputSides > 63 || inputSides < 0 || outputSides > 63 || outputSides < 0) { throw new IllegalArgumentException("Connection sides has to be in the 0-63 range"); } - this.location = new ImmutableBlockLocation(location.x, location.y, location.z); + this.location = new ImmutableBlockLocation(location.x(), location.y(), location.z()); this.connectionSides = (byte) (inputSides | outputSides); this.inputSides = inputSides; this.outputSides = outputSides; } - + /** - * {@inheritDoc} - * Note that two Nodes are are considered equal only if the location, inputSides, and outputSides are the same + * {@inheritDoc} Note that two Nodes are are considered equal only if the location, inputSides, and outputSides are + * the same */ @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } NetworkNode that = (NetworkNode) o; - if (inputSides != that.inputSides) return false; - if (outputSides != that.outputSides) return false; - if (location != null ? !location.equals(that.location) : that.location != null) return false; + if (inputSides != that.inputSides) { + return false; + } + if (outputSides != that.outputSides) { + return false; + } + if (location != null ? !location.equals(that.location) : that.location != null) { + return false; + } return true; } diff --git a/src/main/java/org/terasology/blockNetwork/SimpleNetwork.java b/src/main/java/org/terasology/blockNetwork/SimpleNetwork.java index 32131bf..477d187 100644 --- a/src/main/java/org/terasology/blockNetwork/SimpleNetwork.java +++ b/src/main/java/org/terasology/blockNetwork/SimpleNetwork.java @@ -19,9 +19,9 @@ import com.google.common.collect.Maps; import com.google.common.collect.SetMultimap; import com.google.common.collect.Sets; +import org.joml.Vector3i; import org.terasology.math.Side; import org.terasology.math.SideBitFlag; -import org.terasology.math.geom.Vector3i; import java.util.Arrays; import java.util.Collection; @@ -350,7 +350,7 @@ public byte getLeafSidesInNetwork(T networkNode) { // Degenerated network for (Side connectingOnSide : SideBitFlag.getSides(networkNode.connectionSides)) { Vector3i possibleLocation = networkNode.location.toVector3i(); - possibleLocation.add(connectingOnSide.getVector3i()); + possibleLocation.add(connectingOnSide.direction()); for (NetworkNode node : leafNodes.get(new ImmutableBlockLocation(possibleLocation))) { if (SideBitFlag.hasSide(node.connectionSides, connectingOnSide.reverse())) { return SideBitFlag.getSide(connectingOnSide); @@ -363,7 +363,7 @@ public byte getLeafSidesInNetwork(T networkNode) { byte result = 0; for (Side connectingOnSide : SideBitFlag.getSides(networkNode.connectionSides)) { Vector3i possibleLocation = networkNode.location.toVector3i(); - possibleLocation.add(connectingOnSide.getVector3i()); + possibleLocation.add(connectingOnSide.direction()); for (NetworkNode node : networkingNodes.get(new ImmutableBlockLocation(possibleLocation))) { if (SideBitFlag.hasSide(node.connectionSides, connectingOnSide.reverse())) { result += SideBitFlag.getSide(connectingOnSide); diff --git a/src/test/java/org/terasology/blockNetwork/BlockNetworkTest.java b/src/test/java/org/terasology/blockNetwork/BlockNetworkTest.java index e017125..3b619b8 100644 --- a/src/test/java/org/terasology/blockNetwork/BlockNetworkTest.java +++ b/src/test/java/org/terasology/blockNetwork/BlockNetworkTest.java @@ -18,10 +18,11 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; +import org.joml.Vector3i; +import org.joml.Vector3ic; import org.junit.Before; import org.junit.Test; import org.terasology.math.Side; -import org.terasology.math.geom.Vector3i; import java.util.Set; @@ -44,7 +45,7 @@ public void setup() { allDirections = 63; } - private NetworkNode toNode(Vector3i location, byte directions) { + private NetworkNode toNode(Vector3ic location, byte directions) { return new NetworkNode(location, directions); } diff --git a/src/test/java/org/terasology/blockNetwork/EfficientBlockNetworkTest.java b/src/test/java/org/terasology/blockNetwork/EfficientBlockNetworkTest.java index 54c70fc..6b0f77c 100644 --- a/src/test/java/org/terasology/blockNetwork/EfficientBlockNetworkTest.java +++ b/src/test/java/org/terasology/blockNetwork/EfficientBlockNetworkTest.java @@ -18,11 +18,12 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; +import org.joml.Vector3i; +import org.joml.Vector3ic; import org.junit.Before; import org.junit.Test; import org.terasology.math.Side; import org.terasology.math.SideBitFlag; -import org.terasology.math.geom.Vector3i; import java.util.Set; @@ -45,7 +46,7 @@ public void setup() { allDirections = 63; } - private NetworkNode toNode(Vector3i location, byte directions) { + private NetworkNode toNode(Vector3ic location, byte directions) { return new NetworkNode(location, directions); } diff --git a/src/test/java/org/terasology/blockNetwork/EfficientNetworkTest.java b/src/test/java/org/terasology/blockNetwork/EfficientNetworkTest.java index e5284d6..f039c4e 100644 --- a/src/test/java/org/terasology/blockNetwork/EfficientNetworkTest.java +++ b/src/test/java/org/terasology/blockNetwork/EfficientNetworkTest.java @@ -15,11 +15,12 @@ */ package org.terasology.blockNetwork; +import org.joml.Vector3i; +import org.joml.Vector3ic; import org.junit.Before; import org.junit.Test; import org.terasology.math.Side; import org.terasology.math.SideBitFlag; -import org.terasology.math.geom.Vector3i; import java.util.List; @@ -39,11 +40,11 @@ public void setup() { upOnly = SideBitFlag.addSide((byte) 0, Side.TOP); } - private NetworkNode toNode(Vector3i location, byte sides) { + private NetworkNode toNode(Vector3ic location, byte sides) { return new NetworkNode(location, sides); } - private NetworkNode toNode(Vector3i location, byte inputSides, byte outputSides) { + private NetworkNode toNode(Vector3ic location, byte inputSides, byte outputSides) { return new NetworkNode(location, inputSides, outputSides); } diff --git a/src/test/java/org/terasology/blockNetwork/SimpleNetworkTest.java b/src/test/java/org/terasology/blockNetwork/SimpleNetworkTest.java index 6860647..220c8a3 100644 --- a/src/test/java/org/terasology/blockNetwork/SimpleNetworkTest.java +++ b/src/test/java/org/terasology/blockNetwork/SimpleNetworkTest.java @@ -15,11 +15,12 @@ */ package org.terasology.blockNetwork; +import org.joml.Vector3i; +import org.joml.Vector3ic; import org.junit.Before; import org.junit.Test; import org.terasology.math.Side; import org.terasology.math.SideBitFlag; -import org.terasology.math.geom.Vector3i; import java.util.List; @@ -39,7 +40,7 @@ public void setup() { upOnly = SideBitFlag.addSide((byte) 0, Side.TOP); } - private NetworkNode toNode(Vector3i location, byte sides) { + private NetworkNode toNode(Vector3ic location, byte sides) { return new NetworkNode(location, sides); }