p a t h f i n d e r = p.a.i.n

This commit is contained in:
sharlotte
2021-08-15 22:03:01 +09:00
parent 4532e608b5
commit 8b9648c298
3 changed files with 46 additions and 0 deletions

View File

@@ -6,8 +6,11 @@ import arc.graphics.*;
import arc.graphics.g2d.*;
import arc.math.*;
import arc.scene.ui.layout.*;
import arc.struct.IntSeq;
import arc.struct.Seq;
import arc.util.*;
import mindustry.*;
import mindustry.ai.Pathfinder;
import mindustry.ai.types.BuilderAI;
import mindustry.ai.types.MinerAI;
import mindustry.content.*;
@@ -20,12 +23,29 @@ import mindustry.mod.*;
import mindustry.ui.*;
import mindustry.world.*;
import mindustry.world.blocks.defense.turrets.*;
import mindustry.world.blocks.storage.CoreBlock;
import mindustry.world.meta.BlockFlag;
import java.lang.reflect.Field;
import java.util.Objects;
import static UnitInfo.SVars.*;
import static arc.Core.*;
import static mindustry.Vars.*;
public class Main extends Mod {
int otherCores;
public Tile getNextTile(Tile tile){
Team team = state.rules.waveTeam;
Pathfinder.Flowfield field = pathfinder.getField(team, Pathfinder.costGround, Pathfinder.fieldCore);
Tile tile1 = pathfinder.getTargetTile(tile, field);
pathTiles.add(tile1);
if(otherCores != Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != team) || tile1 == tile || tile1 == null || tile1.build instanceof CoreBlock.CoreBuild || !Groups.build.contains(b -> b.team != team)) //so many ififififififif.
return tile1;
return getNextTile(tile1);
}
@Override
public void init(){
Events.on(ClientLoadEvent.class, e -> {
@@ -53,6 +73,21 @@ public class Main extends Mod {
});
Events.run(Trigger.draw, () -> {
spawner.getSpawns().each(t -> {
Team enemyTeam = state.rules.waveTeam;
otherCores = Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != enemyTeam);
getNextTile(t);
pathTiles.filter(Objects::nonNull);
for(int i = 1; i < pathTiles.size; i++){
if(i + 1 >= pathTiles.size) continue; //prevent IndexOutException
Tile tile1 = pathTiles.get(i);
Tile tile2 = pathTiles.get(i + 1);
Lines.stroke(1, enemyTeam.color);
Lines.line(tile1.worldx(), tile1.worldy(), tile2.worldx(), tile2.worldy());
}
pathTiles.clear();
});
if(settings.getBool("blockstatus")) Groups.build.each(build -> {
if(Vars.player != null && Vars.player.team() == build.team) return;