Merge remote-tracking branch 'upstream/development' into development
This commit is contained in:
commit
76a21dfdf3
11 changed files with 46 additions and 36 deletions
|
@ -6,7 +6,7 @@ import mekanism.api.Coord4D;
|
||||||
import mekanism.api.MekanismConfig.client;
|
import mekanism.api.MekanismConfig.client;
|
||||||
import mekanism.api.MekanismConfig.general;
|
import mekanism.api.MekanismConfig.general;
|
||||||
import mekanism.api.Pos3D;
|
import mekanism.api.Pos3D;
|
||||||
import mekanism.client.ThreadSparkle.INodeChecker;
|
import mekanism.client.SparkleAnimation.INodeChecker;
|
||||||
import mekanism.client.entity.EntityLaser;
|
import mekanism.client.entity.EntityLaser;
|
||||||
import mekanism.client.gui.GuiAmbientAccumulator;
|
import mekanism.client.gui.GuiAmbientAccumulator;
|
||||||
import mekanism.client.gui.GuiChemicalCrystallizer;
|
import mekanism.client.gui.GuiChemicalCrystallizer;
|
||||||
|
@ -543,19 +543,19 @@ public class ClientProxy extends CommonProxy
|
||||||
@Override
|
@Override
|
||||||
public void doGenericSparkle(TileEntity tileEntity, INodeChecker checker)
|
public void doGenericSparkle(TileEntity tileEntity, INodeChecker checker)
|
||||||
{
|
{
|
||||||
new ThreadSparkle(tileEntity, checker).start();
|
new SparkleAnimation(tileEntity, checker).run();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doMultiblockSparkle(final TileEntityMultiblock<?> tileEntity)
|
public void doMultiblockSparkle(final TileEntityMultiblock<?> tileEntity)
|
||||||
{
|
{
|
||||||
new ThreadSparkle(tileEntity, new INodeChecker() {
|
new SparkleAnimation(tileEntity, new INodeChecker() {
|
||||||
@Override
|
@Override
|
||||||
public boolean isNode(TileEntity tile)
|
public boolean isNode(TileEntity tile)
|
||||||
{
|
{
|
||||||
return MultiblockManager.areEqual(tile, tileEntity);
|
return MultiblockManager.areEqual(tile, tileEntity);
|
||||||
}
|
}
|
||||||
}).start();
|
}).run();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -13,7 +13,7 @@ import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public class ThreadSparkle extends Thread
|
public class SparkleAnimation
|
||||||
{
|
{
|
||||||
public TileEntity pointer;
|
public TileEntity pointer;
|
||||||
|
|
||||||
|
@ -23,13 +23,12 @@ public class ThreadSparkle extends Thread
|
||||||
|
|
||||||
public INodeChecker nodeChecker;
|
public INodeChecker nodeChecker;
|
||||||
|
|
||||||
public ThreadSparkle(TileEntity tileEntity, INodeChecker checker)
|
public SparkleAnimation(TileEntity tileEntity, INodeChecker checker)
|
||||||
{
|
{
|
||||||
pointer = tileEntity;
|
pointer = tileEntity;
|
||||||
nodeChecker = checker;
|
nodeChecker = checker;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
|
@ -10,7 +10,7 @@ import mekanism.api.MekanismConfig.usage;
|
||||||
import mekanism.api.Pos3D;
|
import mekanism.api.Pos3D;
|
||||||
import mekanism.api.util.UnitDisplayUtils.EnergyType;
|
import mekanism.api.util.UnitDisplayUtils.EnergyType;
|
||||||
import mekanism.api.util.UnitDisplayUtils.TempType;
|
import mekanism.api.util.UnitDisplayUtils.TempType;
|
||||||
import mekanism.client.ThreadSparkle.INodeChecker;
|
import mekanism.client.SparkleAnimation.INodeChecker;
|
||||||
import mekanism.common.base.IUpgradeTile;
|
import mekanism.common.base.IUpgradeTile;
|
||||||
import mekanism.common.block.BlockMachine.MachineType;
|
import mekanism.common.block.BlockMachine.MachineType;
|
||||||
import mekanism.common.entity.EntityRobit;
|
import mekanism.common.entity.EntityRobit;
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ public class PartRestrictiveTransporter extends PartLogisticalTransporter
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCost()
|
public double getCost()
|
||||||
{
|
{
|
||||||
return 1000;
|
return 1000;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ import java.util.Set;
|
||||||
import mekanism.api.Coord4D;
|
import mekanism.api.Coord4D;
|
||||||
import mekanism.api.ISalinationSolar;
|
import mekanism.api.ISalinationSolar;
|
||||||
import mekanism.api.Range4D;
|
import mekanism.api.Range4D;
|
||||||
import mekanism.client.ThreadSparkle.INodeChecker;
|
import mekanism.client.SparkleAnimation.INodeChecker;
|
||||||
import mekanism.common.Mekanism;
|
import mekanism.common.Mekanism;
|
||||||
import mekanism.common.base.IActiveState;
|
import mekanism.common.base.IActiveState;
|
||||||
import mekanism.common.base.ITankManager;
|
import mekanism.common.base.ITankManager;
|
||||||
|
|
|
@ -10,7 +10,7 @@ import mekanism.api.Pos3D;
|
||||||
import mekanism.api.gas.GasRegistry;
|
import mekanism.api.gas.GasRegistry;
|
||||||
import mekanism.api.gas.GasStack;
|
import mekanism.api.gas.GasStack;
|
||||||
import mekanism.api.gas.GasTank;
|
import mekanism.api.gas.GasTank;
|
||||||
import mekanism.client.ThreadSparkle.INodeChecker;
|
import mekanism.client.SparkleAnimation.INodeChecker;
|
||||||
import mekanism.client.sound.ISoundSource;
|
import mekanism.client.sound.ISoundSource;
|
||||||
import mekanism.common.Mekanism;
|
import mekanism.common.Mekanism;
|
||||||
import mekanism.common.base.IActiveState;
|
import mekanism.common.base.IActiveState;
|
||||||
|
|
Loading…
Reference in a new issue