From 4b1c55b876c1acefce9062a8460733c05f2efdb2 Mon Sep 17 00:00:00 2001 From: Somka000 <51973243+Somka000@users.noreply.github.com> Date: Tue, 15 Dec 2020 15:59:46 +0100 Subject: [PATCH 1/2] Update server (#3984) --- servers_v6.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v6.json b/servers_v6.json index 8884585f7d..d5c6943db0 100644 --- a/servers_v6.json +++ b/servers_v6.json @@ -1,7 +1,7 @@ [ { "name": "mindustry.pl", - "address": ["mindustry.pl:6000", "mindustry.pl:6666", "91.134.217.10:6006"] + "address": ["mindustry.pl:6000", "mindustry.pl:6666", "mindustry.pl"] }, { "name": "{AA}", From 0c581c520f302301cb787362c71849d1a3b47faa Mon Sep 17 00:00:00 2001 From: Slava0135 <40753025+Slava0135@users.noreply.github.com> Date: Tue, 15 Dec 2020 18:52:20 +0300 Subject: [PATCH 2/2] Conveyor upgrade system (#3912) * conveyor/conduit upgrading system * style --- core/src/mindustry/input/InputHandler.java | 11 ++++++++++- core/src/mindustry/input/Placement.java | 17 ++++++++++++++++- .../blocks/distribution/ChainedBuilding.java | 7 +++++++ .../world/blocks/distribution/Conveyor.java | 8 +++++++- .../mindustry/world/blocks/liquid/Conduit.java | 13 ++++++++++++- 5 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 core/src/mindustry/world/blocks/distribution/ChainedBuilding.java diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index cf185a726a..62026d0c35 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -32,6 +32,7 @@ import mindustry.ui.fragments.*; import mindustry.world.*; import mindustry.world.blocks.*; import mindustry.world.blocks.ConstructBlock.*; +import mindustry.world.blocks.distribution.*; import mindustry.world.blocks.payloads.*; import mindustry.world.blocks.power.*; import mindustry.world.blocks.storage.CoreBlock.*; @@ -1161,7 +1162,15 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } if(diagonal){ - points = Placement.pathfindLine(block != null && block.conveyorPlacement, startX, startY, endX, endY); + Tile start = world.tile(startX, startY); + Tile end = world.tile(endX, endY); + if(block != null && block instanceof Autotiler + && start.build instanceof ChainedBuilding && end.build instanceof ChainedBuilding + && block.canReplace(end.build.block) && block.canReplace(start.build.block)){ + points = Placement.upgradeLine(startX, startY, endX, endY); + }else{ + points = Placement.pathfindLine(block != null && block.conveyorPlacement, startX, startY, endX, endY); + } }else{ points = Placement.normalizeLine(startX, startY, endX, endY); } diff --git a/core/src/mindustry/input/Placement.java b/core/src/mindustry/input/Placement.java index 59af8ac517..ee09e21a14 100644 --- a/core/src/mindustry/input/Placement.java +++ b/core/src/mindustry/input/Placement.java @@ -5,7 +5,9 @@ import arc.math.*; import arc.math.geom.*; import arc.struct.*; import arc.util.pooling.*; +import mindustry.gen.*; import mindustry.world.*; +import mindustry.world.blocks.distribution.*; import static mindustry.Vars.*; @@ -23,7 +25,6 @@ public class Placement{ /** Normalize a diagonal line into points. */ public static Seq pathfindLine(boolean conveyors, int startX, int startY, int endX, int endY){ Pools.freeAll(points); - points.clear(); if(conveyors && Core.settings.getBool("conveyorpathfinding")){ if(astar(startX, startY, endX, endY)){ @@ -54,6 +55,20 @@ public class Placement{ return points; } + public static Seq upgradeLine(int startX, int startY, int endX, int endY){ + Pools.freeAll(points); + points.clear(); + Building building = world.tile(startX, startY).build; + points.add(Pools.obtain(Point2.class, Point2::new).set(startX, startY)); + while(building.tile.x != endX || building.tile.y != endY){ + ChainedBuilding chained = (ChainedBuilding)building; + if(chained.next() == null) return pathfindLine(true, startX, startY, endX, endY); + building = chained.next(); + points.add(Pools.obtain(Point2.class, Point2::new).set(building.tile.x, building.tile.y)); + } + return points; + } + private static float tileHeuristic(Tile tile, Tile other){ Block block = control.input.block; diff --git a/core/src/mindustry/world/blocks/distribution/ChainedBuilding.java b/core/src/mindustry/world/blocks/distribution/ChainedBuilding.java new file mode 100644 index 0000000000..45d696159e --- /dev/null +++ b/core/src/mindustry/world/blocks/distribution/ChainedBuilding.java @@ -0,0 +1,7 @@ +package mindustry.world.blocks.distribution; + +import mindustry.gen.*; + +public interface ChainedBuilding{ + Building next(); +} \ No newline at end of file diff --git a/core/src/mindustry/world/blocks/distribution/Conveyor.java b/core/src/mindustry/world/blocks/distribution/Conveyor.java index ab6f394afd..f21f4fbad2 100644 --- a/core/src/mindustry/world/blocks/distribution/Conveyor.java +++ b/core/src/mindustry/world/blocks/distribution/Conveyor.java @@ -91,7 +91,7 @@ public class Conveyor extends Block implements Autotiler{ Mathf.mod(req.tile().build.rotation - req.rotation, 2) == 1 ? Blocks.junction : this; } - public class ConveyorBuild extends Building{ + public class ConveyorBuild extends Building implements ChainedBuilding{ //parallel array data public Item[] ids = new Item[capacity]; public float[] xs = new float[capacity]; @@ -391,5 +391,11 @@ public class Conveyor extends Block implements Autotiler{ len--; } + + @Nullable + @Override + public Building next(){ + return nextc; + } } } diff --git a/core/src/mindustry/world/blocks/liquid/Conduit.java b/core/src/mindustry/world/blocks/liquid/Conduit.java index 2af6613212..fe7f0086b0 100644 --- a/core/src/mindustry/world/blocks/liquid/Conduit.java +++ b/core/src/mindustry/world/blocks/liquid/Conduit.java @@ -16,6 +16,7 @@ import mindustry.graphics.*; import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.*; +import mindustry.world.blocks.distribution.*; import static mindustry.Vars.*; @@ -73,7 +74,7 @@ public class Conduit extends LiquidBlock implements Autotiler{ return new TextureRegion[]{Core.atlas.find("conduit-bottom"), topRegions[0]}; } - public class ConduitBuild extends LiquidBuild{ + public class ConduitBuild extends LiquidBuild implements ChainedBuilding{ public float smoothLiquid; public int blendbits, xscl, yscl, blending; @@ -137,5 +138,15 @@ public class Conduit extends LiquidBlock implements Autotiler{ sleep(); } } + + @Nullable + @Override + public Building next(){ + Tile next = tile.nearby(rotation); + if(next != null && next.build instanceof ConduitBuild){ + return next.build; + } + return null; + } } }