mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 10:12:53 +00:00
Improve feature performance
This commit is contained in:
parent
295e51181b
commit
9de4bf839f
@ -19,12 +19,15 @@
|
||||
package com.volmit.iris.engine;
|
||||
|
||||
import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap;
|
||||
import com.volmit.iris.engine.cache.Cache;
|
||||
import com.volmit.iris.engine.framework.Engine;
|
||||
import com.volmit.iris.engine.framework.EngineParallaxManager;
|
||||
import com.volmit.iris.engine.object.IrisFeaturePositional;
|
||||
import com.volmit.iris.util.collection.KList;
|
||||
import com.volmit.iris.util.documentation.BlockCoordinates;
|
||||
import com.volmit.iris.util.scheduling.IrisLock;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.util.Consumer;
|
||||
|
||||
public class IrisEngineParallax implements EngineParallaxManager {
|
||||
@Getter
|
||||
@ -33,10 +36,6 @@ public class IrisEngineParallax implements EngineParallaxManager {
|
||||
@Getter
|
||||
private final int parallaxSize;
|
||||
|
||||
@Getter
|
||||
private final IrisLock featureLock = new IrisLock("Feature");
|
||||
|
||||
@Getter
|
||||
private final ConcurrentLinkedHashMap<Long, KList<IrisFeaturePositional>> featureCache = new ConcurrentLinkedHashMap.Builder<Long, KList<IrisFeaturePositional>>()
|
||||
.initialCapacity(1024)
|
||||
.maximumWeightedCapacity(1024)
|
||||
@ -47,4 +46,39 @@ public class IrisEngineParallax implements EngineParallaxManager {
|
||||
this.engine = engine;
|
||||
parallaxSize = computeParallaxSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
@BlockCoordinates
|
||||
public void forEachFeature(double x, double z, Consumer<IrisFeaturePositional> f) {
|
||||
if (!getEngine().getDimension().hasFeatures(getEngine())) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (IrisFeaturePositional ipf : forEachFeature(x, z)) {
|
||||
f.accept(ipf);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@BlockCoordinates
|
||||
public KList<IrisFeaturePositional> forEachFeature(double x, double z) {
|
||||
int cx = ((int)x) >> 4;
|
||||
int cz = ((int)x) >> 4;
|
||||
long key = Cache.key(cx, cz);
|
||||
|
||||
return featureCache.compute(key, (k, v) -> {
|
||||
if(v != null)
|
||||
{
|
||||
return v;
|
||||
}
|
||||
|
||||
KList<IrisFeaturePositional> pos = new KList<>();
|
||||
pos.addAll(EngineParallaxManager.super.forEachFeature(cx << 4, cz << 4));
|
||||
pos.addAll(EngineParallaxManager.super.forEachFeature((cx << 4) + 15, cz << 4));
|
||||
pos.addAll(EngineParallaxManager.super.forEachFeature(cx << 4, (cz << 4) + 15));
|
||||
pos.addAll(EngineParallaxManager.super.forEachFeature((cx << 4) + 15, (cz << 4) + 15));
|
||||
pos.removeDuplicates();
|
||||
return pos;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -200,10 +200,6 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
|
||||
}
|
||||
}
|
||||
|
||||
ConcurrentLinkedHashMap<Long, KList<IrisFeaturePositional>> getFeatureCache();
|
||||
|
||||
IrisLock getFeatureLock();
|
||||
|
||||
@BlockCoordinates
|
||||
default void forEachFeature(double x, double z, Consumer<IrisFeaturePositional> f) {
|
||||
if (!getEngine().getDimension().hasFeatures(getEngine())) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user