Hook onto convejor pathfinding
This commit is contained in:
@@ -535,28 +535,6 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
final int[] i = {0};
|
|
||||||
lineRequests.each(req -> {
|
|
||||||
if(!(req.block instanceof PowerNode)) return;
|
|
||||||
|
|
||||||
if(i[0]++ == 0 || i[0] == lineRequests.size){
|
|
||||||
// beginning & end should always be placed
|
|
||||||
}else{
|
|
||||||
// check with how many powernodes the *next* tile will overlap
|
|
||||||
int overlaps = 0;
|
|
||||||
for(int j = 0; j < i[0]; j++){
|
|
||||||
if (((PowerNode) req.block).overlaps(lineRequests.get(i[0]).tile(), lineRequests.get(j).tile()) && lineRequests.get(j).block instanceof PowerNode){
|
|
||||||
overlaps++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if its more than two it can bridge the gap
|
|
||||||
if(overlaps > 1){
|
|
||||||
req.block = Blocks.air;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateLine(int x1, int y1){
|
protected void updateLine(int x1, int y1){
|
||||||
@@ -830,21 +808,46 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
Array<Point2> points;
|
Array<Point2> points;
|
||||||
boolean diagonal = Core.input.keyDown(Binding.diagonal_placement);
|
boolean diagonal = Core.input.keyDown(Binding.diagonal_placement);
|
||||||
|
|
||||||
// place powernodes diagonally by default
|
|
||||||
if((block != null && block.powernodePlacement)){
|
|
||||||
diagonal = !diagonal;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(Core.settings.getBool("swapdiagonal") && mobile){
|
if(Core.settings.getBool("swapdiagonal") && mobile){
|
||||||
diagonal = !diagonal;
|
diagonal = !diagonal;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(diagonal){
|
if(diagonal){
|
||||||
points = Placement.pathfindLine(block != null && block.conveyorPlacement, block != null && block.powernodePlacement, startX, startY, endX, endY);
|
points = Placement.pathfindLine(block != null && block.conveyorPlacement, startX, startY, endX, endY);
|
||||||
}else{
|
}else{
|
||||||
points = Placement.normalizeLine(startX, startY, endX, endY);
|
points = Placement.normalizeLine(startX, startY, endX, endY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Array<Point2> skip = new Array<>();
|
||||||
|
if(block instanceof PowerNode){
|
||||||
|
final int[] i = {0};
|
||||||
|
points.each(req -> {
|
||||||
|
if(i[0]++ == 0 || i[0] == points.size){
|
||||||
|
// beginning & end should always be placed
|
||||||
|
}else{
|
||||||
|
// check with how many powernodes the *next* tile will overlap
|
||||||
|
int overlaps = 0;
|
||||||
|
for(int j = 0; j < i[0]; j++){
|
||||||
|
// skip powernodes we have already crossed off as air
|
||||||
|
if(skip.contains(points.get(j))) continue;
|
||||||
|
|
||||||
|
Tile next = world.ltile(points.get(i[0]).x, points.get(i[0]).y);
|
||||||
|
Tile loop = world.ltile(points.get(j).x, points.get(j).y);
|
||||||
|
|
||||||
|
if (((PowerNode) block).overlaps(next, loop)){
|
||||||
|
overlaps++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if its more than one it can bridge the gap
|
||||||
|
if(overlaps > 1){
|
||||||
|
skip.add(points.get(i[0]-1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
points.removeAll(skip);
|
||||||
|
|
||||||
float angle = Angles.angle(startX, startY, endX, endY);
|
float angle = Angles.angle(startX, startY, endX, endY);
|
||||||
int baseRotation = rotation;
|
int baseRotation = rotation;
|
||||||
if(!overrideLineRotation || diagonal){
|
if(!overrideLineRotation || diagonal){
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public class Placement{
|
|||||||
private static IntSet closed = new IntSet();
|
private static IntSet closed = new IntSet();
|
||||||
|
|
||||||
/** Normalize a diagonal line into points. */
|
/** Normalize a diagonal line into points. */
|
||||||
public static Array<Point2> pathfindLine(boolean conveyors, boolean powernodes, int startX, int startY, int endX, int endY){
|
public static Array<Point2> pathfindLine(boolean conveyors, int startX, int startY, int endX, int endY){
|
||||||
Pools.freeAll(points);
|
Pools.freeAll(points);
|
||||||
|
|
||||||
points.clear();
|
points.clear();
|
||||||
|
|||||||
@@ -93,8 +93,6 @@ public class Block extends BlockStorage{
|
|||||||
public boolean posConfig;
|
public boolean posConfig;
|
||||||
/** Whether this block uses conveyor-type placement mode.*/
|
/** Whether this block uses conveyor-type placement mode.*/
|
||||||
public boolean conveyorPlacement;
|
public boolean conveyorPlacement;
|
||||||
/** Whether this block uses powernode-type placement mode.*/
|
|
||||||
public boolean powernodePlacement;
|
|
||||||
/**
|
/**
|
||||||
* The color of this block when displayed on the minimap or map preview.
|
* The color of this block when displayed on the minimap or map preview.
|
||||||
* Do not set manually! This is overriden when loading for most blocks.
|
* Do not set manually! This is overriden when loading for most blocks.
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class PowerNode extends PowerBlock{
|
|||||||
configurable = true;
|
configurable = true;
|
||||||
consumesPower = false;
|
consumesPower = false;
|
||||||
outputsPower = false;
|
outputsPower = false;
|
||||||
powernodePlacement = true;
|
conveyorPlacement = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user