mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 01:15:52 +01:00
Fixed excessive memory usage of Spatial Index
This commit is contained in:
@@ -8,10 +8,9 @@ import java.util.Map.Entry;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import ch.ethz.globis.phtree.PhTree;
|
||||
import ch.ethz.globis.phtree.v16.PhTree16;
|
||||
import com.google.gson.Gson;
|
||||
import emu.grasscutter.data.custom.*;
|
||||
import emu.grasscutter.scripts.SceneIndexManager;
|
||||
import emu.grasscutter.utils.Utils;
|
||||
import lombok.SneakyThrows;
|
||||
import org.reflections.Reflections;
|
||||
@@ -428,15 +427,12 @@ public class ResourceLoader {
|
||||
continue;
|
||||
}
|
||||
|
||||
PhTree<SceneNpcBornEntry> index = new PhTree16<>(3);
|
||||
|
||||
var data = Grasscutter.getGsonFactory().fromJson(Files.readString(file), SceneNpcBornData.class);
|
||||
if(data.getBornPosList() == null || data.getBornPosList().size() == 0){
|
||||
continue;
|
||||
}
|
||||
data.getBornPosList().forEach(item -> index.put(item.getPos().toLongArray(), item));
|
||||
|
||||
data.setIndex(index);
|
||||
data.setIndex(SceneIndexManager.buildIndex(3, data.getBornPosList(), item -> item.getPos().toPoint()));
|
||||
GameData.getSceneNpcBornData().put(data.getSceneId(), data);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package emu.grasscutter.data.custom;
|
||||
|
||||
import ch.ethz.globis.phtree.PhTree;
|
||||
import com.github.davidmoten.rtreemulti.RTree;
|
||||
import com.github.davidmoten.rtreemulti.geometry.Geometry;
|
||||
import emu.grasscutter.scripts.data.SceneGroup;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Data;
|
||||
@@ -19,7 +20,7 @@ public class SceneNpcBornData {
|
||||
/**
|
||||
* Spatial Index For NPC
|
||||
*/
|
||||
transient PhTree<SceneNpcBornEntry> index;
|
||||
transient RTree<SceneNpcBornEntry, Geometry> index;
|
||||
|
||||
/**
|
||||
* npc groups
|
||||
|
||||
Reference in New Issue
Block a user