From ebee4fa5da44f28b3fce057c746e5af3b964fcd3 Mon Sep 17 00:00:00 2001 From: iczero Date: Fri, 8 Nov 2019 16:56:06 -0500 Subject: [PATCH] Implement build autopausing (#1017) Automatically pause building after current build queue is empty --- core/assets/bundles/bundle.properties | 1 + core/src/io/anuke/mindustry/entities/type/Player.java | 1 + core/src/io/anuke/mindustry/input/DesktopInput.java | 7 +++++++ .../io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java | 3 +++ core/src/io/anuke/mindustry/world/blocks/BuildBlock.java | 3 +++ 5 files changed, 15 insertions(+) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 5a7cda6c66..290e12f224 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -597,6 +597,7 @@ setting.shadows.name = Shadows setting.blockreplace.name = Automatic Block Suggestions setting.linear.name = Linear Filtering setting.hints.name = Hints +setting.buildautopause.name = Auto-pause Building setting.animatedwater.name = Animated Water setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[lightgray] (requires restart)[] diff --git a/core/src/io/anuke/mindustry/entities/type/Player.java b/core/src/io/anuke/mindustry/entities/type/Player.java index 80c9cded3a..7bb6cfdda2 100644 --- a/core/src/io/anuke/mindustry/entities/type/Player.java +++ b/core/src/io/anuke/mindustry/entities/type/Player.java @@ -52,6 +52,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ public @Nullable String uuid, usid; public boolean isAdmin, isTransferring, isShooting, isBoosting, isMobile, isTyping, isBuilding = true; + public boolean buildWasAutoPaused = false; public float boostHeat, shootHeat, destructTime; public boolean achievedFlight; public Color color = new Color(); diff --git a/core/src/io/anuke/mindustry/input/DesktopInput.java b/core/src/io/anuke/mindustry/input/DesktopInput.java index 671c9056c0..3660bb847e 100644 --- a/core/src/io/anuke/mindustry/input/DesktopInput.java +++ b/core/src/io/anuke/mindustry/input/DesktopInput.java @@ -267,6 +267,12 @@ public class DesktopInput extends InputHandler{ int cursorY = tileY(Core.input.mouseY()); int rawCursorX = world.toTile(Core.input.mouseWorld().x), rawCursorY = world.toTile(Core.input.mouseWorld().y); + // automatically pause building if the current build queue is empty + if(Core.settings.getBool("buildautopause") && player.isBuilding && !player.isBuilding()){ + player.isBuilding = false; + player.buildWasAutoPaused = true; + } + if(!selectRequests.isEmpty()){ int shiftX = rawCursorX - schematicX, shiftY = rawCursorY - schematicY; @@ -337,6 +343,7 @@ public class DesktopInput extends InputHandler{ if(Core.input.keyTap(Binding.pause_building)){ player.isBuilding = !player.isBuilding; + player.buildWasAutoPaused = false; } if((cursorX != lastLineX || cursorY != lastLineY) && isPlacing() && mode == placing){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java index 336c93eb6f..1b1d1b9cf4 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -228,6 +228,9 @@ public class SettingsMenuDialog extends SettingsDialog{ game.checkPref("blockreplace", true); game.checkPref("conveyorpathfinding", true); game.checkPref("hints", true); + if(!mobile){ + game.checkPref("buildautopause", false); + } if(steam && !Version.modifier.contains("beta")){ game.checkPref("publichost", false, i -> { diff --git a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java index c39246314c..799eaffaba 100644 --- a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java @@ -144,6 +144,9 @@ public class BuildBlock extends Block{ //if the target is constructible, begin constructing if(entity.cblock != null){ + if(player.buildWasAutoPaused && !player.isBuilding){ + player.isBuilding = true; + } //player.clearBuilding(); player.addBuildRequest(new BuildRequest(tile.x, tile.y, tile.rotation(), entity.cblock), false); }