From 2a2aed52e05e22d87c18567d71c22fe8f2383b11 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 12 Jan 2021 14:52:36 +0000 Subject: [PATCH] Optimised VectorUtils getCircle() --- build.gradle | 2 +- .../java/com/willfp/eco/util/VectorUtils.java | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index b1878b28..b7c51f5a 100644 --- a/build.gradle +++ b/build.gradle @@ -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 \ No newline at end of file diff --git a/src/main/java/com/willfp/eco/util/VectorUtils.java b/src/main/java/com/willfp/eco/util/VectorUtils.java index 28abfcde..181b97e7 100644 --- a/src/main/java/com/willfp/eco/util/VectorUtils.java +++ b/src/main/java/com/willfp/eco/util/VectorUtils.java @@ -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 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 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; } /**