This commit is contained in:
Anuken
2020-10-26 16:06:50 -04:00
parent 73ca6eeb74
commit 909da9de3c
6 changed files with 35 additions and 13 deletions

View File

@@ -314,6 +314,7 @@ public class BlockIndexer{
/** Find the closest ore block relative to a position. */
public Tile findClosestOre(Unit unit, Item item){
if(multimine) return findClosestOre(unit.x, unit.y, item);
if(!(unit instanceof Minerc miner)) return null;
TileArray arr = getOrePositions(item);

View File

@@ -2,14 +2,19 @@ package mindustry.ai.types;
import arc.math.*;
import arc.math.geom.*;
import arc.struct.*;
import arc.util.*;
import mindustry.ai.formations.*;
import mindustry.entities.units.*;
import mindustry.gen.*;
import mindustry.type.*;
import mindustry.world.*;
import mindustry.world.blocks.storage.CoreBlock.*;
import static mindustry.Vars.*;
public class FormationAI extends AIController implements FormationMember{
private static Seq<Tile> tiles = new Seq<>();
public Unit leader;
private Vec3 target = new Vec3();
@@ -51,19 +56,33 @@ public class FormationAI extends AIController implements FormationMember{
Vec2 realtarget = vec.set(target);
float margin = 3f;
float margin = 4f;
float speed = unit.realSpeed();
if(unit.dst(realtarget) <= margin){
unit.vel.approachDelta(Vec2.ZERO, speed * type.accel / 2f);
//unit.vel.approachDelta(Vec2.ZERO, speed * type.accel / 2f);
}else{
unit.moveAt(realtarget.sub(unit).limit(speed));
}
if(unit instanceof Minerc mine && leader instanceof Minerc com){
if(mine.validMine(com.mineTile())){
mine.mineTile(com.mineTile());
if(com.mineTile() != null){
if(multimine){
mine.mineTile(mine.validMine(com.mineTile()) ? com.mineTile() : null);
}else{
if(mine.mineTile() == null){
tiles.clear();
com.mineTile().circle(6, (cx, cy) -> {
Tile tile = world.tile(cx, cy);
if(mine.validMine(tile) && tile.drop() == com.mineTile().drop() && tile != com.mineTile()){
tiles.add(tile);
}
});
Tile min = tiles.min(t -> t.dst2(com.mineTile()));
mine.mineTile(min);
}
}
CoreBuild core = unit.team.core();
@@ -77,7 +96,6 @@ public class FormationAI extends AIController implements FormationMember{
}else{
mine.mineTile(null);
}
}
if(unit instanceof Builderc build && leader instanceof Builderc com && com.activelyBuilding()){