Limit formation speed across collision layers
This commit is contained in:
@@ -12,6 +12,7 @@ import mindustry.async.*;
|
|||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.core.*;
|
import mindustry.core.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
|
import mindustry.world.blocks.environment.*;
|
||||||
|
|
||||||
public class UnitGroup{
|
public class UnitGroup{
|
||||||
public Seq<Unit> units = new Seq<>();
|
public Seq<Unit> units = new Seq<>();
|
||||||
@@ -36,9 +37,14 @@ public class UnitGroup{
|
|||||||
positions[i * 2] = unit.x - cx;
|
positions[i * 2] = unit.x - cx;
|
||||||
positions[i * 2 + 1] = unit.y - cy;
|
positions[i * 2 + 1] = unit.y - cy;
|
||||||
unit.command().groupIndex = i;
|
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
|
//run on new thread to prevent stutter
|
||||||
Vars.mainExecutor.submit(() -> {
|
Vars.mainExecutor.submit(() -> {
|
||||||
//unused space between circles that needs to be reached for compression to end
|
//unused space between circles that needs to be reached for compression to end
|
||||||
|
|||||||
@@ -299,7 +299,7 @@ public class CommandAI extends AIController{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float prefSpeed(){
|
public float prefSpeed(){
|
||||||
return group == null ? super.prefSpeed() : group.minSpeed;
|
return group == null ? super.prefSpeed() : Math.min(group.minSpeed, unit.speed());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -309,10 +309,18 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float minSpeed = 100000000f;
|
||||||
for(int i = 0; i < groups.length; i ++){
|
for(int i = 0; i < groups.length; i ++){
|
||||||
var group = groups[i];
|
var group = groups[i];
|
||||||
if(group != null && group.units.size > 0){
|
if(group != null && group.units.size > 0){
|
||||||
group.calculateFormation(targetAsVec, i);
|
group.calculateFormation(targetAsVec, i);
|
||||||
|
minSpeed = Math.min(group.minSpeed, minSpeed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var group : groups){
|
||||||
|
if(group != null){
|
||||||
|
group.minSpeed = minSpeed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user