diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 83a22a0561..e94a170fef 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1106,6 +1106,7 @@ rules.waves = Waves rules.attack = Attack Mode rules.rtsai = RTS AI rules.rtsminsquadsize = Min Squad Size +rules.rtsmaxsquadsize = Max Squad Size rules.rtsminattackweight = Min Attack Weight rules.cleanupdeadteams = Clean Up Defeated Team Buildings (PvP) rules.corecapture = Capture Core On Destruction diff --git a/core/src/mindustry/ai/RtsAI.java b/core/src/mindustry/ai/RtsAI.java index 752828272a..8660cbb10b 100644 --- a/core/src/mindustry/ai/RtsAI.java +++ b/core/src/mindustry/ai/RtsAI.java @@ -109,6 +109,9 @@ public class RtsAI{ if(unit.isCommandable() && !unit.command().hasCommand() && used.add(unit.id)){ squad.clear(); data.tree().intersect(unit.x - squadRadius/2f, unit.y - squadRadius/2f, squadRadius, squadRadius, squad); + + squad.truncate(data.team.rules().rtsMaxSquad); + //remove overlapping squads squad.removeAll(u -> (u != unit && used.contains(u.id)) || !u.isCommandable() || u.command().hasCommand()); //mark used so other squads can't steal them diff --git a/core/src/mindustry/entities/abilities/MoveEffectAbility.java b/core/src/mindustry/entities/abilities/MoveEffectAbility.java index 049a8dd086..8726fd2d58 100644 --- a/core/src/mindustry/entities/abilities/MoveEffectAbility.java +++ b/core/src/mindustry/entities/abilities/MoveEffectAbility.java @@ -2,6 +2,7 @@ package mindustry.entities.abilities; import arc.graphics.*; import arc.util.*; +import mindustry.*; import mindustry.content.*; import mindustry.entities.*; import mindustry.gen.*; @@ -34,7 +35,7 @@ public class MoveEffectAbility extends Ability{ @Override public void update(Unit unit){ counter += Time.delta; - if(unit.vel.len2() >= minVelocity * minVelocity && (counter >= interval)){ + if(unit.vel.len2() >= minVelocity * minVelocity && (counter >= interval) && !unit.inFogTo(Vars.player.team())){ Tmp.v1.trns(unit.rotation - 90f, x, y); counter %= interval; effect.at(Tmp.v1.x + unit.x, Tmp.v1.y + unit.y, (rotateEffect ? unit.rotation : effectParam) + rotation, teamColor ? unit.team.color : color, parentizeEffects ? unit : null); diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index 67a9354516..bee8e83f99 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -234,6 +234,8 @@ public class Rules{ public boolean rtsAi; /** Minimum size of attack squads. */ public int rtsMinSquad = 4; + /** Maximum size of attack squads. */ + public int rtsMaxSquad = 1000; /** Minimum "advantage" needed for a squad to attack. Higher -> more cautious. */ public float rtsMinWeight = 1.2f; diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 47726a6805..e941b3a113 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -269,6 +269,7 @@ public class CustomRulesDialog extends BaseDialog{ check("@rules.rtsai", b -> teams.rtsAi = b, () -> teams.rtsAi, () -> team != rules.defaultTeam); numberi("@rules.rtsminsquadsize", f -> teams.rtsMinSquad = f, () -> teams.rtsMinSquad, () -> teams.rtsAi, 0, 100); + 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.infiniteresources", b -> teams.infiniteResources = b, () -> teams.infiniteResources); diff --git a/core/src/mindustry/world/blocks/power/ConsumeGenerator.java b/core/src/mindustry/world/blocks/power/ConsumeGenerator.java index 16e213b3dc..d5060c8482 100644 --- a/core/src/mindustry/world/blocks/power/ConsumeGenerator.java +++ b/core/src/mindustry/world/blocks/power/ConsumeGenerator.java @@ -10,9 +10,7 @@ import mindustry.type.*; import mindustry.world.consumers.*; import mindustry.world.meta.*; -/** - * A generator that just takes in certain items or liquids. Basically SingleTypeGenerator, but not unreliable garbage. - */ +/** A generator that just takes in certain items or liquids. */ public class ConsumeGenerator extends PowerGenerator{ /** The time in number of ticks during which a single item will produce power. */ public float itemDuration = 120f;