Optimised VectorUtils getCircle()

This commit is contained in:
Auxilor
2021-01-12 14:52:36 +00:00
parent b16266e22a
commit 2a2aed52e0
2 changed files with 16 additions and 2 deletions

View File

@@ -98,5 +98,5 @@ build.dependsOn publishToMavenLocal
group = 'com.willfp'
archivesBaseName = project.name
version = '1.1.2'
version = '1.1.3'
java.sourceCompatibility = JavaVersion.VERSION_1_8

View File

@@ -6,9 +6,16 @@ import org.bukkit.util.Vector;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
@UtilityClass
public class VectorUtils {
/**
* Cached circles to prevent many sqrt calls.
*/
private final Map<Integer, Vector[]> CIRCLE_CACHE = new HashMap<>();
/**
* If vector has all components as finite.
*
@@ -66,6 +73,11 @@ public class VectorUtils {
* @return An array of {@link Vector}s.
*/
public Vector[] getCircle(final int radius) {
Vector[] cached = CIRCLE_CACHE.get(radius);
if (cached != null) {
return cached;
}
ArrayList<Vector> circleVecs = new ArrayList<>();
double xoffset = -radius;
@@ -85,7 +97,9 @@ public class VectorUtils {
zoffset++;
}
return circleVecs.toArray(new Vector[0]);
Vector[] result = circleVecs.toArray(new Vector[0]);
CIRCLE_CACHE.put(radius, result);
return result;
}
/**