From a15a0d945fb79c2c7960634abedbd3831ef1900e Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 14 Sep 2024 09:22:56 -0400 Subject: [PATCH] Difficulty & AI tweaks --- core/src/mindustry/ai/Pathfinder.java | 8 +++++--- core/src/mindustry/ai/types/FlyingAI.java | 25 +++++++++++++++++++++++ core/src/mindustry/game/Difficulty.java | 4 ++-- gradle.properties | 2 +- 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/ai/Pathfinder.java b/core/src/mindustry/ai/Pathfinder.java index e37adc91b0..a18364e8f5 100644 --- a/core/src/mindustry/ai/Pathfinder.java +++ b/core/src/mindustry/ai/Pathfinder.java @@ -462,17 +462,19 @@ public class Pathfinder implements Runnable{ @Override protected void getPositions(IntSeq out){ if(state.rules.randomWaveAI && team == state.rules.waveTeam){ - rand.setSeed(state.rules.waves ? state.wave : (int)(state.tick / (5400))); + rand.setSeed(state.rules.waves ? state.wave : (int)(state.tick / (5400)) + hashCode()); //maximum amount of different target flag types they will attack - int max = 2; + int max = 1; for(int attempt = 0; attempt < 5 && max > 0; attempt++){ var targets = indexer.getEnemy(team, randomTargets[rand.random(randomTargets.length - 1)]); if(!targets.isEmpty()){ max --; for(Building other : targets){ - out.add(other.tile.array()); + if((other.items != null && other.items.any()) || other.status() != BlockStatus.noInput){ + out.add(other.tile.array()); + } } } } diff --git a/core/src/mindustry/ai/types/FlyingAI.java b/core/src/mindustry/ai/types/FlyingAI.java index f7d533658e..b9f718b8a3 100644 --- a/core/src/mindustry/ai/types/FlyingAI.java +++ b/core/src/mindustry/ai/types/FlyingAI.java @@ -2,6 +2,7 @@ package mindustry.ai.types; import arc.math.*; import mindustry.entities.units.*; +import mindustry.game.*; import mindustry.gen.*; import mindustry.world.meta.*; @@ -29,6 +30,30 @@ public class FlyingAI extends AIController{ } } + @Override + public Teamc targetFlag(float x, float y, BlockFlag flag, boolean enemy){ + if(state.rules.randomWaveAI){ + if(unit.team == Team.derelict) return null; + var list = enemy ? indexer.getEnemy(unit.team, flag) : indexer.getFlagged(unit.team, flag); + if(list.isEmpty()) return null; + + Building closest = null; + float cdist = 0f; + for(Building t : list){ + if((t.items != null && t.items.any()) || t.status() != BlockStatus.noInput){ + float dst = t.dst2(x, y); + if(closest == null || dst < cdist){ + closest = t; + cdist = dst; + } + } + } + return closest; + }else{ + return super.targetFlag(x, y, flag, enemy); + } + } + @Override public Teamc findTarget(float x, float y, float range, boolean air, boolean ground){ var result = findMainTarget(x, y, range, air, ground); diff --git a/core/src/mindustry/game/Difficulty.java b/core/src/mindustry/game/Difficulty.java index 314262f8ef..1f7943d72e 100644 --- a/core/src/mindustry/game/Difficulty.java +++ b/core/src/mindustry/game/Difficulty.java @@ -6,8 +6,8 @@ public enum Difficulty{ //TODO these need tweaks easy(1f, 0.75f, 1.5f), normal(1f, 1f, 1f), - hard(1.25f, 1.5f, 0.75f), - eradication(1.5f, 2f, 0.5f); + hard(1.25f, 1.5f, 0.8f), + eradication(1.5f, 2f, 0.6f); public static final Difficulty[] all = values(); diff --git a/gradle.properties b/gradle.properties index 7e507f48ef..8ceca65918 100644 --- a/gradle.properties +++ b/gradle.properties @@ -26,4 +26,4 @@ org.gradle.caching=true org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 android.enableR8.fullMode=false -archash=8073823706 +archash=25e8455084