Clean up, made Comparator of ItemRailing to compare against distance to source ItemRailing
This commit is contained in:
parent
27bfc697f9
commit
f9483a2db5
4 changed files with 67 additions and 57 deletions
|
@ -1,12 +1,10 @@
|
||||||
package resonantinduction.electrical.itemrailing;
|
package resonantinduction.electrical.itemrailing;
|
||||||
|
|
||||||
import calclavia.lib.grid.NodeGrid;
|
import calclavia.lib.grid.NodeGrid;
|
||||||
import com.google.common.collect.Sets;
|
|
||||||
import resonantinduction.electrical.itemrailing.interfaces.IItemRailing;
|
import resonantinduction.electrical.itemrailing.interfaces.IItemRailing;
|
||||||
import resonantinduction.electrical.itemrailing.interfaces.IItemRailingTransfer;
|
import resonantinduction.electrical.itemrailing.interfaces.IItemRailingTransfer;
|
||||||
import universalelectricity.api.vector.IVector3;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 18/03/14
|
* @since 18/03/14
|
||||||
|
@ -31,14 +29,14 @@ public class GridRailing extends NodeGrid<NodeRailing>
|
||||||
public IItemRailing findNearestInventory(IItemRailingTransfer itemwrapper)
|
public IItemRailing findNearestInventory(IItemRailingTransfer itemwrapper)
|
||||||
{
|
{
|
||||||
IItemRailing[] arr = (IItemRailing[]) this.getNodes().toArray();
|
IItemRailing[] arr = (IItemRailing[]) this.getNodes().toArray();
|
||||||
Arrays.sort(arr, new RailingDistanceComparator.RailingInventoryDistanceComparator());
|
Arrays.sort(arr, new RailingDistanceComparator.RailingInventoryDistanceComparator(itemwrapper.getRailing()));
|
||||||
return arr[0];
|
return arr[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
public IItemRailing findNearestColoredTarget(IItemRailingTransfer itemwrapper)
|
public IItemRailing findNearestColoredTarget(IItemRailingTransfer itemwrapper)
|
||||||
{
|
{
|
||||||
IItemRailing[] arr = (IItemRailing[]) this.getNodes().toArray();
|
IItemRailing[] arr = (IItemRailing[]) this.getNodes().toArray();
|
||||||
Arrays.sort(arr, new RailingDistanceComparator.RailingColoredDistanceComparator(itemwrapper.getColor()));
|
Arrays.sort(arr, new RailingDistanceComparator.RailingColoredDistanceComparator(itemwrapper.getRailing(), itemwrapper.getColor()));
|
||||||
return arr[0];
|
return arr[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,57 +12,25 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 18/03/14
|
|
||||||
* @author tgame14
|
* @author tgame14
|
||||||
|
* @since 18/03/14
|
||||||
*/
|
*/
|
||||||
public class NodeRailing extends Node<IItemRailing, GridRailing, NodeRailing> implements IVectorWorld
|
public class NodeRailing extends Node<IItemRailing, GridRailing, NodeRailing> implements IVectorWorld
|
||||||
{
|
{
|
||||||
public NodeRailing (PartRailing parent)
|
public NodeRailing(PartRailing parent)
|
||||||
{
|
{
|
||||||
super(parent);
|
super(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected GridRailing newGrid ()
|
protected GridRailing newGrid()
|
||||||
{
|
{
|
||||||
return new GridRailing(getClass());
|
return new GridRailing(getClass());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @return possibly null, a IInventory to target
|
* @return possibly null, a IInventory to target
|
||||||
*/
|
*/
|
||||||
public IInventory[] getInventoriesNearby()
|
|
||||||
{
|
|
||||||
List<IInventory> invList = new ArrayList<IInventory>();
|
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
|
||||||
{
|
|
||||||
TileEntity te = parent.getWorldPos().translate(dir).getTileEntity(parent.getWorldPos().world());
|
|
||||||
if (te != null && te instanceof IInventory)
|
|
||||||
{
|
|
||||||
invList.add((IInventory) te);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return (IInventory[]) invList.toArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isLeaf()
|
|
||||||
{
|
|
||||||
int connectionsCount = 0;
|
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
|
||||||
{
|
|
||||||
if (parent.getWorldPos().translate(dir).getTileEntity(parent.getWorldPos().world()) instanceof IItemRailing)
|
|
||||||
{
|
|
||||||
connectionsCount++;
|
|
||||||
if (connectionsCount >= 2)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double z()
|
public double z()
|
||||||
|
|
|
@ -15,6 +15,7 @@ import resonantinduction.core.prefab.part.PartFramedConnection;
|
||||||
import resonantinduction.electrical.Electrical;
|
import resonantinduction.electrical.Electrical;
|
||||||
import resonantinduction.electrical.itemrailing.interfaces.IItemRailing;
|
import resonantinduction.electrical.itemrailing.interfaces.IItemRailing;
|
||||||
import resonantinduction.electrical.itemrailing.interfaces.IItemRailingTransfer;
|
import resonantinduction.electrical.itemrailing.interfaces.IItemRailingTransfer;
|
||||||
|
import universalelectricity.api.energy.EnergyNetworkLoader;
|
||||||
import universalelectricity.api.energy.IConductor;
|
import universalelectricity.api.energy.IConductor;
|
||||||
import universalelectricity.api.energy.IEnergyNetwork;
|
import universalelectricity.api.energy.IEnergyNetwork;
|
||||||
import universalelectricity.api.vector.IVectorWorld;
|
import universalelectricity.api.vector.IVectorWorld;
|
||||||
|
@ -22,6 +23,8 @@ import universalelectricity.api.vector.VectorWorld;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 16/03/14
|
* @since 16/03/14
|
||||||
|
@ -107,13 +110,34 @@ public class PartRailing extends PartFramedConnection<PartRailing.EnumRailing, I
|
||||||
@Override
|
@Override
|
||||||
public IInventory[] getInventoriesNearby()
|
public IInventory[] getInventoriesNearby()
|
||||||
{
|
{
|
||||||
return node.getInventoriesNearby();
|
List<IInventory> invList = new ArrayList<IInventory>();
|
||||||
|
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
||||||
|
{
|
||||||
|
TileEntity te = this.getWorldPos().translate(dir).getTileEntity(this.getWorldPos().world());
|
||||||
|
if (te != null && te instanceof IInventory)
|
||||||
|
{
|
||||||
|
invList.add((IInventory) te);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (IInventory[]) invList.toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isLeaf()
|
public boolean isLeaf()
|
||||||
{
|
{
|
||||||
return node.isLeaf();
|
int connectionsCount = 0;
|
||||||
|
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
||||||
|
{
|
||||||
|
if (this.getWorldPos().translate(dir).getTileEntity(this.getWorldPos().world()) instanceof IItemRailing)
|
||||||
|
{
|
||||||
|
connectionsCount++;
|
||||||
|
if (connectionsCount >= 2)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -158,12 +182,18 @@ public class PartRailing extends PartFramedConnection<PartRailing.EnumRailing, I
|
||||||
return tile instanceof IConductor ? (IConductor) ((IConductor) tile).getInstance(ForgeDirection.UNKNOWN) : null;
|
return tile instanceof IConductor ? (IConductor) ((IConductor) tile).getInstance(ForgeDirection.UNKNOWN) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IEnergyNetwork getNetwork ()
|
public IEnergyNetwork getNetwork()
|
||||||
{
|
{
|
||||||
return null;
|
if (network == null)
|
||||||
}
|
{
|
||||||
|
setNetwork(EnergyNetworkLoader.getNewNetwork(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
return network;
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO: Fix up
|
||||||
@Override
|
@Override
|
||||||
public void setMaterial (int i)
|
public void setMaterial (int i)
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,17 +9,29 @@ import java.util.Comparator;
|
||||||
* @author tgame14
|
* @author tgame14
|
||||||
* @since 16/04/14
|
* @since 16/04/14
|
||||||
*/
|
*/
|
||||||
public class RailingDistanceComparator implements Comparator<IItemRailing>
|
public abstract class RailingDistanceComparator implements Comparator<IItemRailing>
|
||||||
{
|
{
|
||||||
|
private IItemRailing source;
|
||||||
|
|
||||||
|
public RailingDistanceComparator(IItemRailing source)
|
||||||
|
{
|
||||||
|
this.source = source;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compare(IItemRailing o1, IItemRailing o2)
|
public int compare(IItemRailing o1, IItemRailing o2)
|
||||||
{
|
{
|
||||||
return (int) o1.getWorldPos().floor().distance(o2.getWorldPos());
|
return (int) (source.getWorldPos().floor().distance(o1.getWorldPos()) - source.getWorldPos().floor().distance(o2.getWorldPos()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class RailingInventoryDistanceComparator extends RailingDistanceComparator
|
public static class RailingInventoryDistanceComparator extends RailingDistanceComparator
|
||||||
{
|
{
|
||||||
|
public RailingInventoryDistanceComparator(IItemRailing source)
|
||||||
|
{
|
||||||
|
super(source);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compare(IItemRailing o1, IItemRailing o2)
|
public int compare(IItemRailing o1, IItemRailing o2)
|
||||||
{
|
{
|
||||||
|
@ -41,12 +53,14 @@ public class RailingDistanceComparator implements Comparator<IItemRailing>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class RailingColoredDistanceComparator extends RailingDistanceComparator
|
public static class RailingColoredDistanceComparator extends RailingDistanceComparator
|
||||||
{
|
{
|
||||||
private EnumColor color;
|
private EnumColor color;
|
||||||
|
|
||||||
public RailingColoredDistanceComparator(EnumColor color)
|
public RailingColoredDistanceComparator(IItemRailing source, EnumColor color)
|
||||||
{
|
{
|
||||||
|
super(source);
|
||||||
this.color = color;
|
this.color = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue