Merge branch 'development' of https://github.com/aidancbrady/Mekanism into development

This commit is contained in:
Aidan C. Brady 2015-04-10 08:24:34 -04:00
commit 174509444b
7 changed files with 38 additions and 27 deletions

View file

@ -29,5 +29,5 @@ public interface ILogisticalTransporter extends IGridTransmitter<IInventory, Inv
public boolean canReceiveFrom(TileEntity tileEntity, ForgeDirection side); public boolean canReceiveFrom(TileEntity tileEntity, ForgeDirection side);
public int getCost(); public double getCost();
} }

View file

@ -58,7 +58,7 @@ public final class TransporterPathfinder
transportStack.idleDir = newSide; transportStack.idleDir = newSide;
loopSide(ret, newSide); loopSide(ret, newSide);
return new Destination(ret, true, null).setPathType(Path.NONE); return new Destination(ret, true, null, 0).setPathType(Path.NONE);
} }
else { else {
TileEntity tile = start.getFromSide(transportStack.idleDir).getTileEntity(worldObj); TileEntity tile = start.getFromSide(transportStack.idleDir).getTileEntity(worldObj);
@ -66,7 +66,7 @@ public final class TransporterPathfinder
if(transportStack.canInsertToTransporter(tile, transportStack.idleDir)) if(transportStack.canInsertToTransporter(tile, transportStack.idleDir))
{ {
loopSide(ret, transportStack.idleDir); loopSide(ret, transportStack.idleDir);
return new Destination(ret, true, null).setPathType(Path.NONE); return new Destination(ret, true, null, 0).setPathType(Path.NONE);
} }
else { else {
Destination newPath = TransporterPathfinder.getNewBasePath((ILogisticalTransporter)start.getTileEntity(worldObj), transportStack, 0); Destination newPath = TransporterPathfinder.getNewBasePath((ILogisticalTransporter)start.getTileEntity(worldObj), transportStack, 0);
@ -87,7 +87,7 @@ public final class TransporterPathfinder
transportStack.idleDir = newSide; transportStack.idleDir = newSide;
loopSide(ret, newSide); loopSide(ret, newSide);
return new Destination(ret, true, null).setPathType(Path.NONE); return new Destination(ret, true, null, 0).setPathType(Path.NONE);
} }
} }
} }
@ -154,8 +154,9 @@ public final class TransporterPathfinder
public List<Coord4D> path = new ArrayList<Coord4D>(); public List<Coord4D> path = new ArrayList<Coord4D>();
public Path pathType; public Path pathType;
public ItemStack rejected; public ItemStack rejected;
public double score;
public Destination(ArrayList<Coord4D> list, boolean inv, ItemStack rejects) public Destination(ArrayList<Coord4D> list, boolean inv, ItemStack rejects, double gScore)
{ {
path = (List<Coord4D>)list.clone(); path = (List<Coord4D>)list.clone();
@ -165,6 +166,7 @@ public final class TransporterPathfinder
} }
rejected = rejects; rejected = rejects;
score = gScore;
} }
public Destination setPathType(Path type) public Destination setPathType(Path type)
@ -173,6 +175,20 @@ public final class TransporterPathfinder
return this; return this;
} }
public Destination calculateScore(World world)
{
score = 0;
for(Coord4D location : path)
{
TileEntity tile = location.getTileEntity(world);
if(tile instanceof ITransporterTile)
{
score += ((ITransporterTile)tile).getTransmitter().getCost();
}
}
return this;
}
@Override @Override
public int hashCode() public int hashCode()
{ {
@ -190,16 +206,17 @@ public final class TransporterPathfinder
@Override @Override
public int compareTo(Destination dest) public int compareTo(Destination dest)
{ {
if(path.size() < dest.path.size()) if(score < dest.score)
{ {
return -1; return -1;
} }
else if(path.size() > dest.path.size()) else if(score > dest.score)
{ {
return 1; return 1;
} }
else { else
return 0; {
return path.size() - dest.path.size();
} }
} }
} }
@ -240,7 +257,7 @@ public final class TransporterPathfinder
if(test != null) if(test != null)
{ {
return new Destination(test, false, rejects); return new Destination(test, false, rejects, 0).calculateScore(start.world());
} }
Pathfinder p = new Pathfinder(checker, start.world(), dest, start.coord(), stack); Pathfinder p = new Pathfinder(checker, start.world(), dest, start.coord(), stack);
@ -251,7 +268,7 @@ public final class TransporterPathfinder
{ {
PathfinderCache.cachedPaths.put(new PathData(start.coord(), dest, p.side), p.getPath()); PathfinderCache.cachedPaths.put(new PathData(start.coord(), dest, p.side), p.getPath());
return new Destination(p.getPath(), false, rejects); return new Destination(p.getPath(), false, rejects, p.finalScore);
} }
} }
@ -415,17 +432,14 @@ public final class TransporterPathfinder
openSet.remove(currentNode); openSet.remove(currentNode);
closedSet.add(currentNode); closedSet.add(currentNode);
for(int i = 0; i < 6; i++) for(ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS)
{ {
ForgeDirection direction = ForgeDirection.getOrientation(i);
Coord4D neighbor = currentNode.getFromSide(direction); Coord4D neighbor = currentNode.getFromSide(direction);
if(transportStack.canInsertToTransporter(neighbor.getTileEntity(worldObj), direction)) if(transportStack.canInsertToTransporter(neighbor.getTileEntity(worldObj), direction))
{ {
TileEntity tile = neighbor.getTileEntity(worldObj); TileEntity tile = neighbor.getTileEntity(worldObj);
double tentativeG = gScore.get(currentNode) + currentNode.distanceTo(neighbor); double tentativeG = gScore.get(currentNode) + ((ITransporterTile)tile).getTransmitter().getCost();
tentativeG += ((ITransporterTile)tile).getTransmitter().getCost();
if(closedSet.contains(neighbor)) if(closedSet.contains(neighbor))
{ {
@ -435,8 +449,6 @@ public final class TransporterPathfinder
} }
} }
TileEntity currTile = currentNode.getTileEntity(worldObj);
if(!openSet.contains(neighbor) || tentativeG < gScore.get(neighbor)) if(!openSet.contains(neighbor) || tentativeG < gScore.get(neighbor))
{ {
navMap.put(neighbor, currentNode); navMap.put(neighbor, currentNode);
@ -445,7 +457,7 @@ public final class TransporterPathfinder
openSet.add(neighbor); openSet.add(neighbor);
} }
} }
else if(neighbor.equals(finalNode) && destChecker.isValid(transportStack, i, neighbor.getTileEntity(worldObj))) else if(neighbor.equals(finalNode) && destChecker.isValid(transportStack, direction.ordinal(), neighbor.getTileEntity(worldObj)))
{ {
side = direction; side = direction;
results = reconstructPath(navMap, currentNode); results = reconstructPath(navMap, currentNode);

View file

@ -281,17 +281,16 @@ public class TransporterStack
return 0; return 0;
} }
public boolean canInsertToTransporter(TileEntity tileEntity, ForgeDirection side) public boolean canInsertToTransporter(TileEntity tileEntity, ForgeDirection from)
{ {
if(!(tileEntity instanceof ITransporterTile)) if(!(tileEntity instanceof ITransporterTile))
{ {
return false; return false;
} }
TileEntity from = Coord4D.get(tileEntity).getFromSide(side.getOpposite()).getTileEntity(tileEntity.getWorldObj());
ILogisticalTransporter transporter = ((ITransporterTile)tileEntity).getTransmitter(); ILogisticalTransporter transporter = ((ITransporterTile)tileEntity).getTransmitter();
if(!((ITransporterTile)tileEntity).canConnectMutual(side)) if(!((ITransporterTile)tileEntity).canConnectMutual(from.getOpposite()))
{ {
return false; return false;
} }

View file

@ -373,7 +373,7 @@ public class MultipartTransporter extends MultipartTransmitter<IInventory, Inven
} }
@Override @Override
public int getCost() public double getCost()
{ {
return getPart().getCost(); return getPart().getCost();
} }

View file

@ -444,8 +444,8 @@ public class PartLogisticalTransporter extends PartTransmitter<IInventory, Inven
return (MultipartTransporter)transmitterDelegate; return (MultipartTransporter)transmitterDelegate;
} }
public int getCost() public double getCost()
{ {
return 1; return 5.D / tier.speed;
} }
} }

View file

@ -38,7 +38,7 @@ public class PartRestrictiveTransporter extends PartLogisticalTransporter
} }
@Override @Override
public int getCost() public double getCost()
{ {
return 1000; return 1000;
} }

View file

@ -246,7 +246,7 @@ item.dirtySilverDust.name=Dirty Silver Dust
item.dirtyLeadDust.name=Dirty Lead Dust item.dirtyLeadDust.name=Dirty Lead Dust
//Ingots //Ingots
item.obsidianIngot.name=Obsidian Ingot item.obsidianIngot.name=Refined Obsidian Ingot
item.osmiumIngot.name=Osmium Ingot item.osmiumIngot.name=Osmium Ingot
item.bronzeIngot.name=Bronze Ingot item.bronzeIngot.name=Bronze Ingot
item.glowstoneIngot.name=Glowstone Ingot item.glowstoneIngot.name=Glowstone Ingot