Adding comparators to sort through nodes, including logic to choose target for items to fire at
This commit is contained in:
parent
29b5af3e51
commit
27bfc697f9
5 changed files with 104 additions and 12 deletions
|
@ -4,6 +4,7 @@ import calclavia.lib.grid.NodeGrid;
|
|||
import com.google.common.collect.Sets;
|
||||
import resonantinduction.electrical.itemrailing.interfaces.IItemRailing;
|
||||
import resonantinduction.electrical.itemrailing.interfaces.IItemRailingTransfer;
|
||||
import universalelectricity.api.vector.IVector3;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
@ -27,21 +28,17 @@ public class GridRailing extends NodeGrid<NodeRailing>
|
|||
return findNearestColoredTarget(itemwrapper);
|
||||
}
|
||||
|
||||
//TODO: Finish
|
||||
public IItemRailing findNearestInventory(IItemRailingTransfer itemwrapper)
|
||||
{
|
||||
IItemRailing endGoal = null;
|
||||
IItemRailing[] arr = (IItemRailing[]) this.getNodes().toArray();
|
||||
|
||||
for (NodeRailing node : this.getNodes())
|
||||
{
|
||||
|
||||
}
|
||||
return null;
|
||||
Arrays.sort(arr, new RailingDistanceComparator.RailingInventoryDistanceComparator());
|
||||
return arr[0];
|
||||
}
|
||||
|
||||
public IItemRailing findNearestColoredTarget(IItemRailingTransfer itemwrapper)
|
||||
{
|
||||
return null;
|
||||
IItemRailing[] arr = (IItemRailing[]) this.getNodes().toArray();
|
||||
Arrays.sort(arr, new RailingDistanceComparator.RailingColoredDistanceComparator(itemwrapper.getColor()));
|
||||
return arr[0];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ public class NodeRailing extends Node<IItemRailing, GridRailing, NodeRailing> im
|
|||
*
|
||||
* @return possibly null, a IInventory to target
|
||||
*/
|
||||
public IInventory getInventoriesNearby()
|
||||
public IInventory[] getInventoriesNearby()
|
||||
{
|
||||
List<IInventory> invList = new ArrayList<IInventory>();
|
||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
||||
|
@ -43,7 +43,7 @@ public class NodeRailing extends Node<IItemRailing, GridRailing, NodeRailing> im
|
|||
invList.add((IInventory) te);
|
||||
}
|
||||
}
|
||||
return invList.get(parent.getWorldPos().world().rand.nextInt(invList.size()));
|
||||
return (IInventory[]) invList.toArray();
|
||||
}
|
||||
|
||||
public boolean isLeaf()
|
||||
|
|
|
@ -27,7 +27,7 @@ import java.lang.reflect.InvocationTargetException;
|
|||
* @since 16/03/14
|
||||
* @author tgame14
|
||||
*/
|
||||
public class PartRailing extends PartFramedConnection<PartRailing.EnumRailing, IConductor, IEnergyNetwork> implements IConductor, TSlottedPart, JNormalOcclusion, IHollowConnect, IItemRailing
|
||||
public class PartRailing extends PartFramedConnection<PartRailing.EnumRailing, IConductor, IEnergyNetwork> implements IConductor, IItemRailing
|
||||
{
|
||||
|
||||
public static enum EnumRailing
|
||||
|
@ -102,6 +102,20 @@ public class PartRailing extends PartFramedConnection<PartRailing.EnumRailing, I
|
|||
return new VectorWorld(getWorld(), x(), y(), z());
|
||||
}
|
||||
|
||||
//TODO: Handle the part as more of simply a host of Nodes, instead of the node itself
|
||||
|
||||
@Override
|
||||
public IInventory[] getInventoriesNearby()
|
||||
{
|
||||
return node.getInventoriesNearby();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLeaf()
|
||||
{
|
||||
return node.isLeaf();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getResistance ()
|
||||
{
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
package resonantinduction.electrical.itemrailing;
|
||||
|
||||
import calclavia.lib.render.EnumColor;
|
||||
import resonantinduction.electrical.itemrailing.interfaces.IItemRailing;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
/**
|
||||
* @author tgame14
|
||||
* @since 16/04/14
|
||||
*/
|
||||
public class RailingDistanceComparator implements Comparator<IItemRailing>
|
||||
{
|
||||
|
||||
@Override
|
||||
public int compare(IItemRailing o1, IItemRailing o2)
|
||||
{
|
||||
return (int) o1.getWorldPos().floor().distance(o2.getWorldPos());
|
||||
}
|
||||
|
||||
public static class RailingInventoryDistanceComparator extends RailingDistanceComparator
|
||||
{
|
||||
@Override
|
||||
public int compare(IItemRailing o1, IItemRailing o2)
|
||||
{
|
||||
if (o1.getInventoriesNearby() != null && o2.getInventoriesNearby() != null)
|
||||
{
|
||||
return super.compare(o1, o2);
|
||||
}
|
||||
|
||||
else if (o1.getInventoriesNearby() == null && o2.getInventoriesNearby() == null)
|
||||
{
|
||||
return super.compare(o1, o2);
|
||||
}
|
||||
|
||||
if (o1.getInventoriesNearby() != null)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
public static class RailingColoredDistanceComparator extends RailingDistanceComparator
|
||||
{
|
||||
private EnumColor color;
|
||||
|
||||
public RailingColoredDistanceComparator(EnumColor color)
|
||||
{
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(IItemRailing o1, IItemRailing o2)
|
||||
{
|
||||
if (o1.getRailingColor() == o2.getRailingColor())
|
||||
{
|
||||
return super.compare(o1, o2);
|
||||
}
|
||||
|
||||
else if (color == o1.getRailingColor())
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
else if (color == o2.getRailingColor())
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return super.compare(o1, o2);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,7 +2,9 @@ package resonantinduction.electrical.itemrailing.interfaces;
|
|||
|
||||
import calclavia.lib.grid.INodeProvider;
|
||||
import calclavia.lib.render.EnumColor;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import universalelectricity.api.vector.IVectorWorld;
|
||||
import universalelectricity.api.vector.VectorWorld;
|
||||
|
||||
/**
|
||||
|
@ -11,6 +13,7 @@ import universalelectricity.api.vector.VectorWorld;
|
|||
* @since 16/03/14
|
||||
* @author tgame14
|
||||
*/
|
||||
// TODO: Fix up IVectorWorld implementation to somehow overturn error with ChickenBones Multiparts returning doubles
|
||||
public interface IItemRailing extends INodeProvider
|
||||
{
|
||||
public boolean canItemEnter (IItemRailingTransfer item);
|
||||
|
@ -23,6 +26,10 @@ public interface IItemRailing extends INodeProvider
|
|||
|
||||
public VectorWorld getWorldPos();
|
||||
|
||||
public IInventory[] getInventoriesNearby();
|
||||
|
||||
public boolean isLeaf();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue