Started work on PathfinderCache - this will store paths that have been already calculated for later use. When a path becomes possibly invalidated, it is removed from the cache.
This commit is contained in:
parent
4a07fd7491
commit
c04fdd4432
3 changed files with 75 additions and 1 deletions
|
@ -61,6 +61,7 @@ import mekanism.common.tile.TileEntityElectricBlock;
|
|||
import mekanism.common.tile.TileEntityEnergizedSmelter;
|
||||
import mekanism.common.tile.TileEntitySalinationBlock;
|
||||
import mekanism.common.tile.TileEntitySalinationValve;
|
||||
import mekanism.common.transporter.PathfinderCache;
|
||||
import mekanism.common.transporter.TransporterManager;
|
||||
import mekanism.common.util.MekanismUtils;
|
||||
import mekanism.common.util.MekanismUtils.ResourceType;
|
||||
|
@ -983,8 +984,10 @@ public class Mekanism
|
|||
activeVibrators.clear();
|
||||
worldTickHandler.resetRegenChunks();
|
||||
|
||||
//Reset consistent managers
|
||||
MultiblockManager.reset();
|
||||
TransporterManager.flowingStacks.clear();
|
||||
TransporterManager.reset();
|
||||
PathfinderCache.reset();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
package mekanism.common.transporter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import mekanism.api.Coord4D;
|
||||
|
||||
public class PathfinderCache
|
||||
{
|
||||
public static Map<PathData, List<Coord4D>> cachedPaths = new HashMap<PathData, List<Coord4D>>();
|
||||
|
||||
public static void onChanged(Coord4D location)
|
||||
{
|
||||
Set<PathData> toKill = new HashSet<PathData>();
|
||||
|
||||
for(Map.Entry<PathData, List<Coord4D>> entry : cachedPaths.entrySet())
|
||||
{
|
||||
if(entry.getValue().contains(entry))
|
||||
{
|
||||
toKill.add(entry.getKey());
|
||||
}
|
||||
}
|
||||
|
||||
for(PathData path : toKill)
|
||||
{
|
||||
cachedPaths.remove(path);
|
||||
}
|
||||
}
|
||||
|
||||
public static void reset()
|
||||
{
|
||||
cachedPaths.clear();
|
||||
}
|
||||
|
||||
public static class PathData
|
||||
{
|
||||
public Coord4D start;
|
||||
public Coord4D end;
|
||||
|
||||
public PathData(Coord4D s, Coord4D e)
|
||||
{
|
||||
start = s;
|
||||
end = e;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj)
|
||||
{
|
||||
return obj instanceof PathData &&
|
||||
((PathData)obj).start.equals(start) &&
|
||||
((PathData)obj).end.equals(end);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
int code = 1;
|
||||
code = 31 * code + start.hashCode();
|
||||
code = 31 * code + end.hashCode();
|
||||
return code;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -24,6 +24,11 @@ import powercrystals.minefactoryreloaded.api.IDeepStorageUnit;
|
|||
public class TransporterManager
|
||||
{
|
||||
public static Set<TransporterStack> flowingStacks = new HashSet<TransporterStack>();
|
||||
|
||||
public static void reset()
|
||||
{
|
||||
flowingStacks.clear();
|
||||
}
|
||||
|
||||
public static void add(TransporterStack stack)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue