Prioritize powered networks, fixes a glitch with tunnels connecting.

This commit is contained in:
AlgorithmX2
2014-06-08 11:26:33 -05:00
parent 009417ca4f
commit fbe4eebe17
3 changed files with 15 additions and 1 deletions
+7
View File
@@ -28,6 +28,7 @@ public class Grid implements IGrid
HashMap<Class<? extends IGridCache>, GridCacheWrapper> caches = new HashMap<Class<? extends IGridCache>, GridCacheWrapper>(); HashMap<Class<? extends IGridCache>, GridCacheWrapper> caches = new HashMap<Class<? extends IGridCache>, GridCacheWrapper>();
GridNode pivot; GridNode pivot;
int isImportant; // how import is this network?
public Grid(GridNode center) { public Grid(GridNode center) {
this.pivot = center; this.pivot = center;
@@ -228,4 +229,10 @@ public class Grid implements IGrid
} }
} }
public void setImportantFlag(int i, boolean publicHasPower)
{
int flag = 1 << i;
isImportant = (isImportant & ~flag) | (publicHasPower ? flag : 0);
}
} }
+6 -1
View File
@@ -62,7 +62,7 @@ public class GridConnection implements IGridConnection, IPathItem
GridPropagator gp = new GridPropagator( a.getInternalGrid() ); GridPropagator gp = new GridPropagator( a.getInternalGrid() );
b.beginVisition( gp ); b.beginVisition( gp );
} }
else if ( a.myGrid.size() > b.myGrid.size() ) else if ( isNetworkABetter( a, b ) )
{ {
GridPropagator gp = new GridPropagator( a.getInternalGrid() ); GridPropagator gp = new GridPropagator( a.getInternalGrid() );
b.beginVisition( gp ); b.beginVisition( gp );
@@ -82,6 +82,11 @@ public class GridConnection implements IGridConnection, IPathItem
sideB.addConnection( this ); sideB.addConnection( this );
} }
private boolean isNetworkABetter(GridNode a, GridNode b)
{
return ((Grid) a.myGrid).isImportant > ((Grid) b.myGrid).isImportant || a.myGrid.size() > b.myGrid.size();
}
@Override @Override
public void destroy() public void destroy()
{ {
+2
View File
@@ -27,6 +27,7 @@ import appeng.api.networking.events.MENetworkPowerStatusChange;
import appeng.api.networking.events.MENetworkPowerStorage; import appeng.api.networking.events.MENetworkPowerStorage;
import appeng.api.networking.pathing.IPathingGrid; import appeng.api.networking.pathing.IPathingGrid;
import appeng.api.networking.storage.IStackWatcherHost; import appeng.api.networking.storage.IStackWatcherHost;
import appeng.me.Grid;
import appeng.me.GridNode; import appeng.me.GridNode;
import appeng.me.energy.EnergyThreshold; import appeng.me.energy.EnergyThreshold;
import appeng.me.energy.EnergyWatcher; import appeng.me.energy.EnergyWatcher;
@@ -379,6 +380,7 @@ public class EnergyGridCache implements IEnergyGrid
return; return;
publicHasPower = newState; publicHasPower = newState;
((Grid) myGrid).setImportantFlag( 0, publicHasPower );
grid.postEvent( new MENetworkPowerStatusChange() ); grid.postEvent( new MENetworkPowerStatusChange() );
} }