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:
Aidan C. Brady 2014-08-08 00:13:17 -04:00
parent 4a07fd7491
commit c04fdd4432
3 changed files with 75 additions and 1 deletions

View file

@ -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

View file

@ -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;
}
}
}

View file

@ -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)
{