From 207826ae8a5ba5c118570d9214b2ec42805a583f Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sun, 7 Apr 2024 13:29:30 +0200 Subject: [PATCH] Optimize BundleFilter --- .../bausystem/features/tracer/Trace.java | 14 +++--- .../tracer/rendering/BundleFilter.java | 46 ++++++++++--------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/Trace.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/Trace.java index 1572c1ad..dbfc8162 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/Trace.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/Trace.java @@ -30,7 +30,6 @@ import de.steamwar.entity.REntityServer; import lombok.Getter; import org.bukkit.entity.Player; -import java.lang.reflect.Array; import java.util.*; import java.util.stream.Stream; @@ -222,7 +221,8 @@ public class Trace { private List> bundleRecords(List records, BundleFilter filter){ List> bundles = new ArrayList<>(); - recordsLoop : for(TNTRecord record : records) { + recordsLoop: + for (TNTRecord record : records) { if(bundles.isEmpty()){ List firstBundle = new ArrayList<>(); firstBundle.add(record); @@ -232,17 +232,15 @@ public class Trace { for(int i = bundles.size() - 1; i >= 0; i--){ List bundle = bundles.get(i); - Optional filterResult = filter.apply.apply(record, bundle.get(0)); - - if(filterResult.isPresent() && filterResult.get()) - bundle.add(record); - else{ + Boolean filterResult = filter.function.apply(record, bundle.get(0)); + if (filterResult == null || !filterResult) { ArrayList newBundle = new ArrayList<>(); newBundle.add(record); bundles.add(newBundle); continue recordsLoop; + } else { + bundle.add(record); } - } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/BundleFilter.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/BundleFilter.java index e511c923..5232065c 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/BundleFilter.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/BundleFilter.java @@ -20,45 +20,47 @@ package de.steamwar.bausystem.features.tracer.rendering; import de.steamwar.bausystem.features.tracer.TNTRecord; +import lombok.RequiredArgsConstructor; -import java.util.Optional; import java.util.function.BiFunction; +@RequiredArgsConstructor public enum BundleFilter { - //TODO chagne optional to true flase null LOOSE((TNTRecord a, TNTRecord b) -> { - if(a.isExplosion() != b.isExplosion()) return Optional.of(false); - if(a.getLocation().distance(b.getLocation()) <= BundleFilter.pixelSize) return Optional.of(false); - if(a.getVelocity().distance(b.getVelocity()) <= BundleFilter.pixelSize) return Optional.of(false); - return Optional.of(true); + if (a.isExplosion() != b.isExplosion()) return false; + if (a.getLocation().distanceSquared(b.getLocation()) <= BundleFilter.pixelSizeSquared) return false; + if (a.getVelocity().distanceSquared(b.getVelocity()) <= BundleFilter.pixelSizeSquared) return false; + return true; }), DEFAULT((TNTRecord a, TNTRecord b) -> { - if(a.isExplosion() != b.isExplosion()) return Optional.of(false); - if(a.getTicksSinceStart() != b.getTicksSinceStart()) return Optional.empty(); - if(a.getLocation().distance(b.getLocation()) <= BundleFilter.pixelSize) return Optional.of(false); - if(a.getVelocity().distance(b.getVelocity()) <= BundleFilter.pixelSize) return Optional.of(false); - return Optional.of(true); + if (a.isExplosion() != b.isExplosion()) return false; + if (a.getTicksSinceStart() != b.getTicksSinceStart()) return null; + if (a.getLocation().distanceSquared(b.getLocation()) <= BundleFilter.pixelSizeSquared) return false; + if (a.getVelocity().distanceSquared(b.getVelocity()) <= BundleFilter.pixelSizeSquared) return false; + return true; }), STRICT((TNTRecord a, TNTRecord b) -> { - if(a.isExplosion() != b.isExplosion()) return Optional.of(false); - if(!a.getLocation().equals(b.getLocation())) return Optional.of(false); - if(!a.getVelocity().equals(b.getVelocity())) return Optional.of(false); - if(a.getTicksSinceStart() != b.getTicksSinceStart()) return Optional.empty(); - return Optional.of(true); + if (a.isExplosion() != b.isExplosion()) return false; + if (!a.getLocation().equals(b.getLocation())) return false; + if (!a.getVelocity().equals(b.getVelocity())) return false; + if (a.getTicksSinceStart() != b.getTicksSinceStart()) return null; + return true; }), NONE((TNTRecord a, TNTRecord b) -> { - return Optional.empty(); + return null; }); - public BiFunction> apply; + /** + * {@code null}: Bundling can be stopped from this point forward + * {@code false}: No bundling allowed + * {@code true}: Bundling should be applied + */ + public final BiFunction function; private static final double pixelSize = 0.0625; - - BundleFilter(BiFunction> apply){ - this.apply = apply; - } + private static final double pixelSizeSquared = pixelSize * pixelSize; }