Merged Unit & Builder components / Cleanup

This commit is contained in:
Anuken
2020-11-17 19:40:18 -05:00
parent 8280166485
commit 527be41e32
38 changed files with 152 additions and 125 deletions

View File

@@ -14,21 +14,20 @@ import static mindustry.Vars.*;
public class BuilderAI extends AIController{
float buildRadius = 1500;
boolean found = false;
@Nullable Builderc following;
@Nullable Unit following;
@Override
public void updateMovement(){
Builderc builder = (Builderc)unit;
if(builder.moving()){
builder.lookAt(builder.vel().angle());
if(unit.moving()){
unit.lookAt(unit.vel.angle());
}
if(target != null && shouldShoot()){
unit.lookAt(target);
}
builder.updateBuilding(true);
unit.updateBuilding = true;
if(following != null){
//try to follow and mimic someone
@@ -36,18 +35,18 @@ public class BuilderAI extends AIController{
//validate follower
if(!following.isValid() || !following.activelyBuilding()){
following = null;
builder.plans().clear();
unit.plans.clear();
return;
}
//set to follower's first build plan, whatever that is
builder.plans().clear();
builder.plans().addFirst(following.buildPlan());
unit.plans.clear();
unit.plans.addFirst(following.buildPlan());
}
if(builder.buildPlan() != null){
if(unit.buildPlan() != null){
//approach request if building
BuildPlan req = builder.buildPlan();
BuildPlan req = unit.buildPlan();
boolean valid =
(req.tile().build instanceof ConstructBuild && req.tile().<ConstructBuild>bc().cblock == req.block) ||
@@ -60,7 +59,7 @@ public class BuilderAI extends AIController{
moveTo(req.tile(), buildingRange - 20f);
}else{
//discard invalid request
builder.plans().removeFirst();
unit.plans.removeFirst();
}
}else{
@@ -71,8 +70,8 @@ public class BuilderAI extends AIController{
Units.nearby(unit.team, unit.x, unit.y, buildRadius, u -> {
if(found) return;
if(u instanceof Builderc b && u != unit && b.activelyBuilding()){
BuildPlan plan = b.buildPlan();
if(u.canBuild() && u != unit && u.activelyBuilding()){
BuildPlan plan = u.buildPlan();
Building build = world.build(plan.x, plan.y);
if(build instanceof ConstructBuild cons){
@@ -80,7 +79,7 @@ public class BuilderAI extends AIController{
//make sure you can reach the request in time
if(dist / unit.speed() < cons.buildCost * 0.9f){
following = b;
following = u;
found = true;
}
}
@@ -98,7 +97,7 @@ public class BuilderAI extends AIController{
blocks.removeFirst();
}else if(Build.validPlace(content.block(block.block), unit.team(), block.x, block.y, block.rotation)){ //it's valid.
//add build request.
builder.addBuild(new BuildPlan(block.x, block.y, block.rotation, content.block(block.block), block.config));
unit.addBuild(new BuildPlan(block.x, block.y, block.rotation, content.block(block.block), block.config));
//shift build plan to tail so next unit builds something else.
blocks.addLast(blocks.removeFirst());
}else{

View File

@@ -59,13 +59,13 @@ public class FormationAI extends AIController implements FormationMember{
unit.moveAt(realtarget.sub(unit).limit(speed));
}
if(unit instanceof Minerc mine && leader instanceof Minerc com){
if(com.mineTile() != null && mine.validMine(com.mineTile())){
mine.mineTile(com.mineTile());
if(unit.canMine() && leader.canMine()){
if(leader.mineTile != null && unit.validMine(leader.mineTile)){
unit.mineTile(leader.mineTile);
CoreBuild core = unit.team.core();
if(core != null && com.mineTile().drop() != null && unit.within(core, unit.type.range) && !unit.acceptsItem(com.mineTile().drop())){
if(core != null && leader.mineTile.drop() != null && unit.within(core, unit.type.range) && !unit.acceptsItem(leader.mineTile.drop())){
if(core.acceptStack(unit.stack.item, unit.stack.amount, unit) > 0){
Call.transferItemTo(unit.stack.item, unit.stack.amount, unit.x, unit.y, core);
@@ -73,13 +73,13 @@ public class FormationAI extends AIController implements FormationMember{
}
}
}else{
mine.mineTile(null);
unit.mineTile(null);
}
}
if(unit instanceof Builderc build && leader instanceof Builderc com && com.activelyBuilding()){
build.clearBuilding();
build.addBuild(com.buildPlan());
if(unit.canBuild() && leader.canBuild() && leader.activelyBuilding()){
unit.clearBuilding();
leader.addBuild(unit.buildPlan());
}
}

View File

@@ -92,9 +92,7 @@ public class LogicAI extends AIController{
}
}
case stop -> {
if(unit instanceof Builderc build){
build.clearBuilding();
}
unit.clearBuilding();
}
}

View File

@@ -17,21 +17,21 @@ public class MinerAI extends AIController{
protected void updateMovement(){
Building core = unit.closestCore();
if(!(unit instanceof Minerc miner) || core == null) return;
if(!(unit.canMine()) || core == null) return;
if(miner.mineTile() != null && !miner.mineTile().within(unit, unit.type.range)){
miner.mineTile(null);
if(unit.mineTile != null && !unit.mineTile.within(unit, unit.type.range)){
unit.mineTile(null);
}
if(mining){
if(timer.get(timerTarget2, 60 * 4) || targetItem == null){
targetItem = unit.team.data().mineItems.min(i -> indexer.hasOre(i) && miner.canMine(i), i -> core.items.get(i));
targetItem = unit.team.data().mineItems.min(i -> indexer.hasOre(i) && unit.canMine(i), i -> core.items.get(i));
}
//core full of the target item, do nothing
if(targetItem != null && core.acceptStack(targetItem, 1, unit) == 0){
unit.clearItem();
miner.mineTile(null);
unit.mineTile(null);
return;
}
@@ -47,7 +47,7 @@ public class MinerAI extends AIController{
moveTo(ore, unit.type.range / 2f, 20f);
if(unit.within(ore, unit.type.range)){
miner.mineTile(ore);
unit.mineTile = ore;
}
if(ore.block() != Blocks.air){
@@ -56,7 +56,7 @@ public class MinerAI extends AIController{
}
}
}else{
miner.mineTile(null);
unit.mineTile = null;
if(unit.stack.amount == 0){
mining = true;