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;
|
package com.volmit.iris.engine;
|
||||||
|
|
||||||
import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap;
|
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.Engine;
|
||||||
import com.volmit.iris.engine.framework.EngineParallaxManager;
|
import com.volmit.iris.engine.framework.EngineParallaxManager;
|
||||||
import com.volmit.iris.engine.object.IrisFeaturePositional;
|
import com.volmit.iris.engine.object.IrisFeaturePositional;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import com.volmit.iris.util.collection.KList;
|
||||||
|
import com.volmit.iris.util.documentation.BlockCoordinates;
|
||||||
import com.volmit.iris.util.scheduling.IrisLock;
|
import com.volmit.iris.util.scheduling.IrisLock;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import org.bukkit.util.Consumer;
|
||||||
|
|
||||||
public class IrisEngineParallax implements EngineParallaxManager {
|
public class IrisEngineParallax implements EngineParallaxManager {
|
||||||
@Getter
|
@Getter
|
||||||
@ -33,10 +36,6 @@ public class IrisEngineParallax implements EngineParallaxManager {
|
|||||||
@Getter
|
@Getter
|
||||||
private final int parallaxSize;
|
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>>()
|
private final ConcurrentLinkedHashMap<Long, KList<IrisFeaturePositional>> featureCache = new ConcurrentLinkedHashMap.Builder<Long, KList<IrisFeaturePositional>>()
|
||||||
.initialCapacity(1024)
|
.initialCapacity(1024)
|
||||||
.maximumWeightedCapacity(1024)
|
.maximumWeightedCapacity(1024)
|
||||||
@ -47,4 +46,39 @@ public class IrisEngineParallax implements EngineParallaxManager {
|
|||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
parallaxSize = computeParallaxSize();
|
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
|
@BlockCoordinates
|
||||||
default void forEachFeature(double x, double z, Consumer<IrisFeaturePositional> f) {
|
default void forEachFeature(double x, double z, Consumer<IrisFeaturePositional> f) {
|
||||||
if (!getEngine().getDimension().hasFeatures(getEngine())) {
|
if (!getEngine().getDimension().hasFeatures(getEngine())) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user