diff --git a/core/src/mindustry/ai/UnitGroup.java b/core/src/mindustry/ai/UnitGroup.java index 8c255c1752..ba6ebec3a7 100644 --- a/core/src/mindustry/ai/UnitGroup.java +++ b/core/src/mindustry/ai/UnitGroup.java @@ -12,6 +12,7 @@ import mindustry.async.*; import mindustry.content.*; import mindustry.core.*; import mindustry.gen.*; +import mindustry.world.blocks.environment.*; public class UnitGroup{ public Seq units = new Seq<>(); @@ -36,9 +37,14 @@ public class UnitGroup{ positions[i * 2] = unit.x - cx; positions[i * 2 + 1] = unit.y - cy; unit.command().groupIndex = i; - minSpeed = Math.min(unit.speed(), minSpeed); + + //don't factor in the floor speed multiplier + Floor on = unit.isFlying() ? Blocks.air.asFloor() : unit.floorOn(); + minSpeed = Math.min(unit.speed() / on.speedMultiplier, minSpeed); } + if(Float.isInfinite(minSpeed) || Float.isNaN(minSpeed)) minSpeed = 999999f; + //run on new thread to prevent stutter Vars.mainExecutor.submit(() -> { //unused space between circles that needs to be reached for compression to end diff --git a/core/src/mindustry/ai/types/CommandAI.java b/core/src/mindustry/ai/types/CommandAI.java index a2a75008e9..6733d205f2 100644 --- a/core/src/mindustry/ai/types/CommandAI.java +++ b/core/src/mindustry/ai/types/CommandAI.java @@ -299,7 +299,7 @@ public class CommandAI extends AIController{ @Override public float prefSpeed(){ - return group == null ? super.prefSpeed() : group.minSpeed; + return group == null ? super.prefSpeed() : Math.min(group.minSpeed, unit.speed()); } @Override diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 652eb9c949..0765a91cef 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -309,10 +309,18 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } } + float minSpeed = 100000000f; for(int i = 0; i < groups.length; i ++){ var group = groups[i]; if(group != null && group.units.size > 0){ group.calculateFormation(targetAsVec, i); + minSpeed = Math.min(group.minSpeed, minSpeed); + } + } + + for(var group : groups){ + if(group != null){ + group.minSpeed = minSpeed; } } }