Skip to content

Commit

Permalink
DroneAI added infinite range in sandbox
Browse files Browse the repository at this point in the history
  • Loading branch information
Zelaux committed Feb 8, 2025
1 parent fdb26d7 commit e3d5529
Showing 1 changed file with 63 additions and 64 deletions.
127 changes: 63 additions & 64 deletions src/omaloon/ai/drone/UtilityDroneAI.java
Original file line number Diff line number Diff line change
@@ -1,135 +1,134 @@
package omaloon.ai.drone;

import arc.graphics.g2d.*;
import arc.struct.Queue;
import arc.util.Time;
import arc.util.Tmp;
import arc.struct.*;
import arc.util.*;
import arclibrary.graphics.*;
import mindustry.*;
import mindustry.content.Fx;
import mindustry.entities.units.BuildPlan;
import mindustry.gen.Call;
import mindustry.gen.Unit;
import mindustry.content.*;
import mindustry.entities.units.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.type.Item;
import mindustry.ui.*;
import mindustry.world.Tile;
import mindustry.world.blocks.ConstructBlock;
import mindustry.world.*;
import mindustry.world.blocks.*;
import mindustry.world.blocks.ConstructBlock.*;
import mindustry.world.blocks.storage.CoreBlock;
import ol.gen.OlCall;
import omaloon.ai.DroneAI;
import mindustry.world.blocks.storage.*;
import ol.gen.*;
import omaloon.ai.*;
import omaloon.utils.*;

import static mindustry.Vars.mineTransferRange;
import static mindustry.Vars.*;

public class UtilityDroneAI extends DroneAI {
public class UtilityDroneAI extends DroneAI{
public float mineRangeScl = 0.75f;
public float buildRangeScl = 0.75f;
public float buildRangeSclInv =1-buildRangeScl;
public float buildRangeSclInv = 1 - buildRangeScl;

public UtilityDroneAI(Unit owner) {
public UtilityDroneAI(Unit owner){
super(owner);
}

private static float rangeOrInfinite(float buildRange){
return state.rules.infiniteResources ? Float.MAX_VALUE : buildRange;
}

@Override
public void updateMovement() {
public void updateMovement(){
unit.updateBuilding = false;
unit.mineTile = null;
tryTransportItems();

if (tryBuild()) return;
if (tryMine()) return;
if(tryBuild()) return;
if(tryMine()) return;
rally();
}

private void tryTransportItems() {
if (unit.stack.amount <= 0) return;
private void tryTransportItems(){
if(unit.stack.amount <= 0) return;

CoreBlock.CoreBuild core = unit.closestCore();

if (core != null && !unit.within(core, owner.type.range)) {
if(core != null && !unit.within(core, owner.type.range)){
core = owner.closestCore();
if(owner.within(core,mineTransferRange)){
OlCall.chainTransfer(unit.stack.item,unit.x,unit.y,owner,core);
if(owner.within(core, mineTransferRange)){
OlCall.chainTransfer(unit.stack.item, unit.x, unit.y, owner, core);
}else{
for (int i = 0; i < unit.stack.amount; i++) {
for(int i = 0; i < unit.stack.amount; i++){
Call.transferItemToUnit(unit.stack.item, unit.x, unit.y, owner);
}
}
} else {
}else{
Call.transferItemTo(unit, unit.stack.item, unit.stack.amount, unit.x, unit.y, core);
}
unit.clearItem();
}

private boolean tryBuild() {
private boolean tryBuild(){
Queue<BuildPlan> prev = unit.plans;
prev.clear();

Queue<BuildPlan> plans = owner.plans;
if (plans.isEmpty()) return false;
if (!owner.updateBuilding) return false;
if(plans.isEmpty()) return false;
if(!owner.updateBuilding) return false;

CoreBlock.CoreBuild core = unit.team.core();


int totalSkipped = 0;
if(DebugDraw.isDraw()){
DrawText.defaultFont= Fonts.def;
DebugDraw.request(()->{
Draw.draw(Layer.end,()->{
DrawText.defaultFont = Fonts.def;
DebugDraw.request(() -> {
Draw.draw(Layer.end, () -> {
Draw.color(Pal.heal);
Lines.circle(owner.x,owner.y,owner.type.buildRange);
Lines.circle(owner.x, owner.y, owner.type.buildRange);
Draw.color(Pal.berylShot);
Lines.circle(unit.x,unit.y,unit.type.buildRange);
EFill.polyCircle(unit.x,unit.y, Vars.tilesize/4f);
Lines.circle(unit.x, unit.y, unit.type.buildRange);
EFill.polyCircle(unit.x, unit.y, Vars.tilesize / 4f);
});
});
for(int i = 0; i < plans.size; i++){
BuildPlan plan = plans.get(i);
int i1 = i;
DebugDraw.request(()->{
Draw.draw(Layer.end,()->{
DrawText.drawText(plan,""+i1);
DebugDraw.request(() -> {
Draw.draw(Layer.end, () -> {
DrawText.drawText(plan, "" + i1);
});
});
}
}
final float ownerRange = rangeOrInfinite(owner.type.buildRange);
//IMPORTANT unit.plans.size must be 0
for (int i = 0; i < plans.size; i++) {
for(int i = 0; i < plans.size; i++){
BuildPlan buildPlan = plans.first();

if (!unit.shouldSkip(buildPlan, core) && owner.within(buildPlan, owner.type.buildRange)) {
// moveTo(buildPlan.tile(), unit.type.buildRange * buildRangeScl, 30f);
if(!unit.shouldSkip(buildPlan, core) && owner.within(buildPlan, ownerRange))
break;
}
plans.removeFirst();
Fx.fireSmoke.at(buildPlan);
if(buildPlan.stuck){
// Fx.heal.at();
}
if(DebugDraw.isDraw()) Fx.fireSmoke.at(buildPlan);
plans.addLast(buildPlan);
totalSkipped++;
}
var currentPlan=plans.first();
var currentPlan = plans.first();


boolean withinOwner= owner.within(currentPlan,owner.type.buildRange);
boolean isConstructing =withinOwner && currentPlan.tile().build instanceof ConstructBuild;
if (totalSkipped == plans.size && !isConstructing)
boolean withinOwner = owner.within(currentPlan, ownerRange);
boolean isConstructing = withinOwner && currentPlan.tile().build instanceof ConstructBuild;
if(totalSkipped == plans.size && !isConstructing)
return false;

float myRange = unit.type.buildRange;
moveTo(currentPlan.tile(), myRange * buildRangeScl, 30f);
if(!unit.within(currentPlan, myRange - myRange * buildRangeSclInv / 2))
return true;
if(!state.rules.infiniteResources){
float myRange = unit.type.buildRange;
moveTo(currentPlan.tile(), myRange * buildRangeScl, 30f);
if(!unit.within(currentPlan, myRange - Math.min(tilesize * 1.5f, myRange * buildRangeSclInv / 2)))
return true;
}
unit.plans = plans;
unit.updateBuilding = true;
unit.updateBuildLogic();
unit.lookAt(currentPlan);
for (BuildPlan plan : plans) {
if (plan.tile().build instanceof ConstructBlock.ConstructBuild it) {
if (it.progress > 0 && !plan.initialized) {
for(BuildPlan plan : plans){
if(plan.tile().build instanceof ConstructBlock.ConstructBuild it){
if(it.progress > 0 && !plan.initialized){
plan.initialized = true;
}
}
Expand All @@ -139,15 +138,15 @@ private boolean tryBuild() {
return true;
}

protected boolean tryMine() {
protected boolean tryMine(){
Tile mineTile = owner.mineTile();
if (mineTile == null) return false;
if (owner.stack.amount == owner.type.itemCapacity) return false;
if ((owner.getMineResult(owner.mineTile) != owner.stack.item || owner.stack.amount <= 0) && (owner.stack.amount != 0))
if(mineTile == null) return false;
if(owner.stack.amount == owner.type.itemCapacity) return false;
if((owner.getMineResult(owner.mineTile) != owner.stack.item || owner.stack.amount <= 0) && (owner.stack.amount != 0))
return false;


if (!owner.within(mineTile.worldx(), mineTile.worldy(), owner.type.mineRange)) return false;
if(!owner.within(mineTile.worldx(), mineTile.worldy(), owner.type.mineRange)) return false;
unit.mineTile = owner.mineTile;
moveTo(Tmp.v1.set(mineTile.worldx(), mineTile.worldy()), unit.type.mineRange * mineRangeScl, 30f);
return true;
Expand Down

0 comments on commit e3d5529

Please sign in to comment.