From 5f8f0140a2796f0ddb9af0dfae95e4baa0b5d656 Mon Sep 17 00:00:00 2001 From: patatayui <152031869+patatayui@users.noreply.github.com> Date: Mon, 10 Feb 2025 17:04:14 +0100 Subject: [PATCH] Allow conveyors/ducts to use duct/conveyor bridges (#10179) * Allow conveyors/ducts to use duct/conveyor bridges * Apply suggestions from code review --------- Co-authored-by: Anuken --- core/src/mindustry/input/Placement.java | 6 +++--- core/src/mindustry/world/blocks/distribution/Conveyor.java | 7 ++++--- core/src/mindustry/world/blocks/distribution/Duct.java | 6 +++--- core/src/mindustry/world/blocks/liquid/Conduit.java | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/core/src/mindustry/input/Placement.java b/core/src/mindustry/input/Placement.java index 5274692aaa0f..f50f33d9dba1 100644 --- a/core/src/mindustry/input/Placement.java +++ b/core/src/mindustry/input/Placement.java @@ -129,10 +129,10 @@ public static boolean isSidePlace(Seq plans){ } public static void calculateBridges(Seq plans, ItemBridge bridge){ - calculateBridges(plans, bridge, t -> false); + calculateBridges(plans, bridge, false, t -> false); } - public static void calculateBridges(Seq plans, ItemBridge bridge, Boolf avoid){ + public static void calculateBridges(Seq plans, ItemBridge bridge, boolean hasJunction, Boolf avoid){ if(isSidePlace(plans) || plans.size == 0) return; //check for orthogonal placement + unlocked state @@ -170,7 +170,7 @@ public static void calculateBridges(Seq plans, ItemBridge bridge, Boo continue outer; }else if(placeable.get(other)){ - if(wereSame){ + if(wereSame && hasJunction){ //the gap is fake, it's just conveyors that can be replaced with junctions i ++; continue outer; diff --git a/core/src/mindustry/world/blocks/distribution/Conveyor.java b/core/src/mindustry/world/blocks/distribution/Conveyor.java index cf1ab2088929..49f8c307a918 100644 --- a/core/src/mindustry/world/blocks/distribution/Conveyor.java +++ b/core/src/mindustry/world/blocks/distribution/Conveyor.java @@ -64,7 +64,7 @@ public void init(){ super.init(); if(junctionReplacement == null) junctionReplacement = Blocks.junction; - if(bridgeReplacement == null || !(bridgeReplacement instanceof ItemBridge)) bridgeReplacement = Blocks.itemBridge; + if(bridgeReplacement == null || !(bridgeReplacement instanceof ItemBridge || bridgeReplacement instanceof DuctBridge)) bridgeReplacement = Blocks.itemBridge; } @Override @@ -92,8 +92,9 @@ public boolean canReplace(Block other){ @Override public void handlePlacementLine(Seq plans){ if(bridgeReplacement == null) return; - - Placement.calculateBridges(plans, (ItemBridge)bridgeReplacement, b -> b instanceof Conveyor); + boolean hasJuntionReplacement = junctionReplacement != null; + if(bridgeReplacement instanceof DuctBridge bridge) Placement.calculateBridges(plans, bridge, hasJuntionReplacement, b -> b instanceof Duct || b instanceof Conveyor); + if(bridgeReplacement instanceof ItemBridge bridge) Placement.calculateBridges(plans, bridge, hasJuntionReplacement, b -> b instanceof Conveyor); } @Override diff --git a/core/src/mindustry/world/blocks/distribution/Duct.java b/core/src/mindustry/world/blocks/distribution/Duct.java index dacd3a8b8e10..14f29fd9de3c 100644 --- a/core/src/mindustry/world/blocks/distribution/Duct.java +++ b/core/src/mindustry/world/blocks/distribution/Duct.java @@ -62,7 +62,7 @@ public void setStats(){ public void init(){ super.init(); - if(bridgeReplacement == null || !(bridgeReplacement instanceof DuctBridge)) bridgeReplacement = Blocks.ductBridge; + if(bridgeReplacement == null || !(bridgeReplacement instanceof DuctBridge || bridgeReplacement instanceof ItemBridge)) bridgeReplacement = Blocks.ductBridge; } @Override @@ -106,8 +106,8 @@ public TextureRegion[] icons(){ @Override public void handlePlacementLine(Seq plans){ if(bridgeReplacement == null) return; - - Placement.calculateBridges(plans, (DuctBridge)bridgeReplacement, false, b -> b instanceof Duct || b instanceof StackConveyor || b instanceof Conveyor); + if(bridgeReplacement instanceof ItemBridge bridge) Placement.calculateBridges(plans, bridge, false, b -> b instanceof Duct || b instanceof StackConveyor || b instanceof Conveyor); + if(bridgeReplacement instanceof DuctBridge bridge) Placement.calculateBridges(plans, bridge, false, b -> b instanceof Duct || b instanceof StackConveyor || b instanceof Conveyor); } public class DuctBuild extends Building{ diff --git a/core/src/mindustry/world/blocks/liquid/Conduit.java b/core/src/mindustry/world/blocks/liquid/Conduit.java index 64f1b02ac4e9..39517544875f 100644 --- a/core/src/mindustry/world/blocks/liquid/Conduit.java +++ b/core/src/mindustry/world/blocks/liquid/Conduit.java @@ -140,7 +140,7 @@ public void handlePlacementLine(Seq plans){ if(rotBridgeReplacement instanceof DirectionBridge duct){ Placement.calculateBridges(plans, duct, true, b -> b instanceof Conduit); }else{ - Placement.calculateBridges(plans, (ItemBridge)bridgeReplacement, b -> b instanceof Conduit); + Placement.calculateBridges(plans, (ItemBridge)bridgeReplacement, true, b -> b instanceof Conduit); } }