diff --git a/core/src/mindustry/ai/types/FlyingAI.java b/core/src/mindustry/ai/types/FlyingAI.java index 3122a56951..4a1400e598 100644 --- a/core/src/mindustry/ai/types/FlyingAI.java +++ b/core/src/mindustry/ai/types/FlyingAI.java @@ -2,7 +2,6 @@ package mindustry.ai.types; import arc.math.*; import mindustry.entities.units.*; -import mindustry.game.*; import mindustry.gen.*; import mindustry.world.meta.*; @@ -31,30 +30,6 @@ 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) && t.block.targetable){ - 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); @@ -76,7 +51,7 @@ public class FlyingAI extends AIController{ rand.setSeed(unit.type.id + (state.rules.waves ? state.wave : unit.id)); //try a few random flags first for(int attempt = 0; attempt < 5; attempt++){ - Teamc result = targetFlag(x, y, randomTargets[rand.random(randomTargets.length - 1)], true); + Teamc result = targetFlagActive(x, y, randomTargets[rand.random(randomTargets.length - 1)], true); if(result != null) return result; } //try the closest target @@ -88,7 +63,7 @@ public class FlyingAI extends AIController{ Teamc result = target(x, y, range, air, ground); if(result != null) return result; }else if(ground){ - Teamc result = targetFlag(x, y, flag, true); + Teamc result = targetFlagActive(x, y, flag, true); if(result != null) return result; } } diff --git a/core/src/mindustry/entities/units/AIController.java b/core/src/mindustry/entities/units/AIController.java index 9ca7908990..61f3ce7bd5 100644 --- a/core/src/mindustry/entities/units/AIController.java +++ b/core/src/mindustry/entities/units/AIController.java @@ -264,6 +264,11 @@ public class AIController implements UnitController{ return Geometry.findClosest(x, y, enemy ? indexer.getEnemy(unit.team, flag) : indexer.getFlagged(unit.team, flag)); } + public Teamc targetFlagActive(float x, float y, BlockFlag flag, boolean enemy){ + if(unit.team == Team.derelict) return null; + return Geometry.findClosest(x, y, enemy ? indexer.getEnemy(unit.team, flag) : indexer.getFlagged(unit.team, flag), t -> ((t.items != null && t.items.any()) || t.status() != BlockStatus.noInput) && t.block.targetable); + } + public Teamc target(float x, float y, float range, boolean air, boolean ground){ return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground && (unit.type.targetUnderBlocks || !t.block.underBullets)); } diff --git a/core/src/mindustry/game/MapObjectives.java b/core/src/mindustry/game/MapObjectives.java index 9caace999a..333adf616b 100644 --- a/core/src/mindustry/game/MapObjectives.java +++ b/core/src/mindustry/game/MapObjectives.java @@ -313,6 +313,11 @@ public class MapObjectives implements Iterable, Eachable, Eachable, Eachable, Eachable, Eachable, Eachable, Eachable, Eachable, Eachable, Eachable, Eachable, Eachable, Eachable { + unit.beforeParse(); //add reconstructor type if(value.has("requirements")){ JsonValue rec = value.remove("requirements"); diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index e6ebce1042..a60d41cb17 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -1301,6 +1301,10 @@ public class UnitType extends UnlockableContent implements Senseable{ initPathType(); } + public void beforeParse(){ + totalRequirements = cachedRequirements = firstRequirements = null; + } + /** @return the time required to build this unit, as a value that takes into account reconstructors */ public float getBuildTime(){ getTotalRequirements(); diff --git a/gradle.properties b/gradle.properties index 9d775d9cd6..b069861c74 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=514b290fde +archash=8c17f18ffb