From 29855243cbc0b72695d9ba314b12250e0c9a16f1 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 16 May 2023 17:24:41 -0400 Subject: [PATCH] Base building AI is back --- core/assets/bundles/bundle.properties | 2 + core/assets/maps/glacier.msav | Bin 7198 -> 8550 bytes core/assets/maps/passage.msav | Bin 13732 -> 15083 bytes core/assets/maps/veins.msav | Bin 22989 -> 24431 bytes core/src/mindustry/ai/BaseBuilderAI.java | 325 ++++++++++++++++++ core/src/mindustry/ai/types/BuilderAI.java | 12 +- core/src/mindustry/core/Logic.java | 6 + core/src/mindustry/game/Rules.java | 5 + core/src/mindustry/game/Teams.java | 4 +- .../ui/dialogs/CustomRulesDialog.java | 4 + 10 files changed, 355 insertions(+), 3 deletions(-) create mode 100644 core/src/mindustry/ai/BaseBuilderAI.java diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index c7d8db925b..1b327a02cd 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1212,6 +1212,8 @@ rules.wavetimer = Wave Timer rules.wavesending = Wave Sending rules.waves = Waves rules.attack = Attack Mode +rules.buildai = Base Builder AI +rules.buildaitier = Builder AI Tier rules.rtsai = RTS AI [red](WIP) rules.rtsminsquadsize = Min Squad Size rules.rtsmaxsquadsize = Max Squad Size diff --git a/core/assets/maps/glacier.msav b/core/assets/maps/glacier.msav index efe240108d7b7c17a5cb8355fdb667a36487b7d3..cdb524a0d4ff848b056845eb46d3c7bca2556058 100644 GIT binary patch literal 8550 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 literal 7198 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 diff --git a/core/assets/maps/passage.msav b/core/assets/maps/passage.msav index e9b8c5b1d12ff1c546fd8da83a3fae520acefa9f..fb14ff303228a3a86d0a471bf484fccb5b13a4b2 100644 GIT binary patch literal 15083 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 diff --git a/core/assets/maps/veins.msav b/core/assets/maps/veins.msav index 037d3f0b7596a5d6f329126d0b0a3d5d899a28f1..ad6a8b5c013eae731accb12430ecf4ec10609b67 100644 GIT binary patch literal 24431 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 literal 22989 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 diff --git a/core/src/mindustry/ai/BaseBuilderAI.java b/core/src/mindustry/ai/BaseBuilderAI.java new file mode 100644 index 0000000000..807458b349 --- /dev/null +++ b/core/src/mindustry/ai/BaseBuilderAI.java @@ -0,0 +1,325 @@ +package mindustry.ai; + +import arc.math.*; +import arc.math.geom.*; +import arc.struct.*; +import arc.util.*; +import mindustry.*; +import mindustry.ai.BaseRegistry.*; +import mindustry.content.*; +import mindustry.core.*; +import mindustry.game.*; +import mindustry.game.Schematic.*; +import mindustry.game.Teams.*; +import mindustry.gen.*; +import mindustry.maps.generators.*; +import mindustry.type.*; +import mindustry.world.*; +import mindustry.world.blocks.defense.*; +import mindustry.world.blocks.payloads.*; +import mindustry.world.blocks.production.*; +import mindustry.world.blocks.storage.*; +import mindustry.world.blocks.storage.CoreBlock.*; + +import static mindustry.Vars.*; + +public class BaseBuilderAI{ + private static final Vec2 axis = new Vec2(), rotator = new Vec2(); + private static final int attempts = 4; + private static final float emptyChance = 0.01f; + private static final int timerStep = 0, timerSpawn = 1, timerRefreshPath = 2; + private static final float placeIntervalMin = 12f, placeIntervalMax = 2f; + private static final int pathStep = 50; + private static final Seq tmpTiles = new Seq<>(); + + private static int correct = 0, incorrect = 0; + + private int lastX, lastY, lastW, lastH; + private boolean triedWalls, foundPath; + + final TeamData data; + final Interval timer = new Interval(4); + + IntSet path = new IntSet(); + IntSet calcPath = new IntSet(); + @Nullable Tile calcTile; + boolean calculating, startedCalculating; + int calcCount = 0; + int totalCalcs = 0; + Block wallType; + + public BaseBuilderAI(TeamData data){ + this.data = data; + } + + public void update(){ + + //fill cores. + if(data.team.cores().size > 0){ + var core = data.team.cores().first(); + for(Item item : content.items()){ + core.items.set(item, core.getMaximumAccepted(item)); + } + } + + if(wallType == null){ + wallType = BaseGenerator.getDifficultyWall(1, data.team.rules().buildAiTier / 0.8f); + } + + if(data.team.rules().aiCoreSpawn && timer.get(timerSpawn, 60 * 6f) && data.hasCore()){ + CoreBlock block = (CoreBlock)data.core().block; + int coreUnits = data.countType(block.unitType); + + //create AI core unit(s) + if(!state.isEditor() && coreUnits < data.cores.size){ + Unit unit = block.unitType.create(data.team); + unit.set(data.cores.random()); + unit.add(); + Fx.spawn.at(unit); + } + } + + //refresh path + if(!calculating && (timer.get(timerRefreshPath, 3f * Time.toMinutes) || !startedCalculating) && data.hasCore()){ + calculating = true; + startedCalculating = true; + calcPath.clear(); + } + + //didn't find tile in time + if(calculating && calcCount >= world.width() * world.height()){ + calculating = false; + calcCount = 0; + calcPath.clear(); + totalCalcs ++; + } + + //calculate path for units so schematics are not placed on it + if(calculating){ + if(calcTile == null){ + Vars.spawner.eachGroundSpawn((x, y) -> calcTile = world.tile(x, y)); + if(calcTile == null){ + calculating = false; + } + }else{ + var field = pathfinder.getField(data.team, Pathfinder.costGround, Pathfinder.fieldCore); + + if(field.weights != null){ + int[] weights = field.weights; + for(int i = 0; i < pathStep; i++){ + int minCost = Integer.MAX_VALUE; + int cx = calcTile.x, cy = calcTile.y; + boolean foundAny = false; + for(Point2 p : Geometry.d4){ + int nx = cx + p.x, ny = cy + p.y, packed = world.packArray(nx, ny); + + Tile other = world.tile(nx, ny); + if(other != null && weights[packed] < minCost && weights[packed] != -1){ + minCost = weights[packed]; + calcTile = other; + foundAny = true; + } + } + + //didn't find anything, break out of loop, this will trigger a clear later + if(!foundAny){ + calcCount = Integer.MAX_VALUE; + break; + } + + calcPath.add(calcTile.pos()); + for(Point2 p : Geometry.d8){ + calcPath.add(Point2.pack(p.x + calcTile.x, p.y + calcTile.y)); + } + + //found the end. + if(calcTile.build instanceof CoreBuild b && b.team != data.team){ + //clean up calculations and flush results + calculating = false; + calcCount = 0; + path.clear(); + path.addAll(calcPath); + calcPath.clear(); + calcTile = null; + totalCalcs ++; + foundPath = true; + + break; + } + + calcCount ++; + } + } + } + } + + //only schedule when there's something to build. + if(foundPath && data.plans.isEmpty() && timer.get(timerStep, Mathf.lerp(placeIntervalMin, placeIntervalMax, data.team.rules().buildAiTier))){ + //TODO walls are silly, no walls + //if(!triedWalls){ + // tryWalls(); + // triedWalls = true; + //} + + for(int i = 0; i < attempts; i++){ + int range = 150; + + Position pos = randomPosition(); + + //when there are no random positions, do nothing. + if(pos == null) return; + + Tmp.v1.rnd(Mathf.random(range)); + int wx = (int)(World.toTile(pos.getX()) + Tmp.v1.x), wy = (int)(World.toTile(pos.getY()) + Tmp.v1.y); + Tile tile = world.tiles.getc(wx, wy); + + //try not to block the spawn point + if(spawner.getSpawns().contains(t -> t.within(tile, tilesize * 40f))){ + continue; + } + + Seq parts = null; + + //pick a completely random base part, and place it a random location + //((yes, very intelligent)) + if(tile.drop() != null && Vars.bases.forResource(tile.drop()).any()){ + parts = Vars.bases.forResource(tile.drop()); + }else if(Mathf.chance(emptyChance)){ + parts = Vars.bases.parts; + } + + if(parts != null){ + BasePart part = parts.random(); + if(tryPlace(part, tile.x, tile.y)){ + break; + } + } + } + } + } + + /** @return a random position from which to seed building. */ + private Position randomPosition(){ + if(data.hasCore()){ + return data.cores.random(); + }else if(data.team == state.rules.waveTeam){ + return spawner.getSpawns().random(); + } + return null; + } + + private boolean tryPlace(BasePart part, int x, int y){ + int rotation = Mathf.range(2); + axis.set((int)(part.schematic.width / 2f), (int)(part.schematic.height / 2f)); + Schematic result = Schematics.rotate(part.schematic, rotation); + int rotdeg = rotation*90; + rotator.set(part.centerX, part.centerY).rotateAround(axis, rotdeg); + //bottom left schematic corner + int cx = x - (int)rotator.x; + int cy = y - (int)rotator.y; + + //check valid placeability + for(Stile tile : result.tiles){ + int realX = tile.x + cx, realY = tile.y + cy; + if(!Build.validPlace(tile.block, data.team, realX, realY, tile.rotation)){ + return false; + } + Tile wtile = world.tile(realX, realY); + + if(tile.block instanceof PayloadConveyor || tile.block instanceof PayloadBlock){ + //near a building + for(Point2 point : Edges.getEdges(tile.block.size)){ + var t = world.build(tile.x + point.x, tile.y + point.y); + if(t != null){ + return false; + } + } + } + + //may intersect AI path + tmpTiles.clear(); + if(tile.block.solid && wtile != null && wtile.getLinkedTilesAs(tile.block, tmpTiles).contains(t -> path.contains(t.pos()))){ + return false; + } + } + + //make sure at least X% of resource requirements are met + correct = incorrect = 0; + boolean anyDrills = false; + + if(part.required instanceof Item){ + for(Stile tile : result.tiles){ + if(tile.block instanceof Drill){ + anyDrills = true; + + tile.block.iterateTaken(tile.x + cx, tile.y + cy, (ex, ey) -> { + Tile res = world.rawTile(ex, ey); + if(res.drop() == part.required){ + correct ++; + }else if(res.drop() != null){ + incorrect ++; + } + }); + } + } + } + + //fail if not enough fit requirements + if(anyDrills && (incorrect != 0 || correct == 0)){ + return false; + } + + //queue it + for(Stile tile : result.tiles){ + data.plans.add(new BlockPlan(cx + tile.x, cy + tile.y, tile.rotation, tile.block.id, tile.config)); + } + + lastX = cx - 1; + lastY = cy - 1; + lastW = result.width + 2; + lastH = result.height + 2; + + triedWalls = false; + + return true; + } + + private void tryWalls(){ + Block wall = wallType; + Building spawnt = state.rules.defaultTeam.core() != null ? state.rules.defaultTeam.core() : data.team.core(); + Tile spawn = spawnt == null ? null : spawnt.tile; + + if(spawn == null) return; + + for(int wx = lastX; wx <= lastX + lastW; wx++){ + outer: + for(int wy = lastY; wy <= lastY + lastH; wy++){ + Tile tile = world.tile(wx, wy); + + if(tile == null || !tile.block().alwaysReplace) continue; + + boolean any = false; + + for(Point2 p : Geometry.d8){ + if(Angles.angleDist(Angles.angle(p.x, p.y), spawn.angleTo(tile)) > 70){ + continue; + } + + Tile o = world.tile(tile.x + p.x, tile.y + p.y); + if(o != null && (o.block() instanceof PayloadBlock || o.block() instanceof PayloadConveyor || o.block() instanceof ShockMine)){ + continue outer; + } + + if(o != null && o.team() == data.team && !(o.block() instanceof Wall)){ + any = true; + } + } + + tmpTiles.clear(); + if(any && Build.validPlace(wall, data.team, tile.x, tile.y, 0) && !tile.getLinkedTilesAs(wall, tmpTiles).contains(t -> path.contains(t.pos()))){ + data.plans.add(new BlockPlan(tile.x, tile.y, (short)0, wall.id, null)); + } + } + } + } +} \ No newline at end of file diff --git a/core/src/mindustry/ai/types/BuilderAI.java b/core/src/mindustry/ai/types/BuilderAI.java index 6c71f5f934..a8ea3118cf 100644 --- a/core/src/mindustry/ai/types/BuilderAI.java +++ b/core/src/mindustry/ai/types/BuilderAI.java @@ -12,14 +12,14 @@ import mindustry.world.blocks.ConstructBlock.*; import static mindustry.Vars.*; public class BuilderAI extends AIController{ - public static float buildRadius = 1500, retreatDst = 110f, retreatDelay = Time.toSeconds * 2f; + public static float buildRadius = 1500, retreatDst = 110f, retreatDelay = Time.toSeconds * 2f, defaultRebuildPeriod = 60f * 2f; public @Nullable Unit assistFollowing; public @Nullable Unit following; public @Nullable Teamc enemy; public @Nullable BlockPlan lastPlan; - public float fleeRange = 370f, rebuildPeriod = 60f * 2f; + public float fleeRange = 370f, rebuildPeriod = defaultRebuildPeriod; public boolean alwaysFlee; public boolean onlyAssist; @@ -34,6 +34,14 @@ public class BuilderAI extends AIController{ public BuilderAI(){ } + @Override + public void init(){ + //rebuild much faster with buildAI; there are usually few builder units so this is fine + if(rebuildPeriod == defaultRebuildPeriod && unit.team.rules().buildAi){ + rebuildPeriod = 10f; + } + } + @Override public void updateMovement(){ diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index bde8089da8..b312e93374 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -445,6 +445,12 @@ public class Logic implements ApplicationListener{ updateWeather(); for(TeamData data : state.teams.getActive()){ + //does not work on PvP so built-in attack maps can have it on by default without issues + if(data.team.rules().buildAi && !state.rules.pvp){ + if(data.buildAi == null) data.buildAi = new BaseBuilderAI(data); + data.buildAi.update(); + } + if(data.team.rules().rtsAi){ if(data.rtsAi == null) data.rtsAi = new RtsAI(data); data.rtsAi.update(); diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index f6445db9ec..177021f1cb 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -267,6 +267,11 @@ public class Rules{ /** If true, this team has infinite unit ammo. */ public boolean infiniteAmmo; + /** AI that builds random schematics. */ + public boolean buildAi; + /** Tier of builder AI. [0, 1] */ + public float buildAiTier = 1f; + /** Enables "RTS" unit AI. */ public boolean rtsAi; /** Minimum size of attack squads. */ diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index 87eebbdbf0..e47b5bfb13 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -241,6 +241,8 @@ public class Teams{ public static class TeamData{ public final Team team; + /** Handles building ""bases"". */ + public @Nullable BaseBuilderAI buildAi; /** Handles RTS unit control. */ public @Nullable RtsAI rtsAi; @@ -409,7 +411,7 @@ public class Teams{ /** @return whether this team is controlled by the AI and builds bases. */ public boolean hasAI(){ - return team.rules().rtsAi; + return team.rules().rtsAi || team.rules().buildAi; } @Override diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 4f35ae48ac..f1f574f954 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -300,6 +300,10 @@ public class CustomRulesDialog extends BaseDialog{ numberi("@rules.rtsmaxsquadsize", f -> teams.rtsMaxSquad = f, () -> teams.rtsMaxSquad, () -> teams.rtsAi, 1, 1000); number("@rules.rtsminattackweight", f -> teams.rtsMinWeight = f, () -> teams.rtsMinWeight, () -> teams.rtsAi); + check("@rules.buildai", b -> teams.buildAi = b, () -> teams.buildAi, () -> team != rules.defaultTeam && rules.env != Planets.erekir.defaultEnv && !rules.pvp); + //disallow on Erekir (this is broken for mods I'm sure, but whatever) + number("@rules.buildaitier", false, f -> teams.buildAiTier = f, () -> teams.buildAiTier, () -> teams.buildAi && rules.env != Planets.erekir.defaultEnv && !rules.pvp, 0, 1); + check("@rules.infiniteresources", b -> teams.infiniteResources = b, () -> teams.infiniteResources); number("@rules.buildspeedmultiplier", f -> teams.buildSpeedMultiplier = f, () -> teams.buildSpeedMultiplier, 0.001f, 50f);