RTS max squad size

This commit is contained in:
Anuken
2022-07-11 18:18:22 -04:00
parent 567394aced
commit 72b36d97bd
6 changed files with 10 additions and 4 deletions

View File

@@ -1106,6 +1106,7 @@ rules.waves = Waves
rules.attack = Attack Mode rules.attack = Attack Mode
rules.rtsai = RTS AI rules.rtsai = RTS AI
rules.rtsminsquadsize = Min Squad Size rules.rtsminsquadsize = Min Squad Size
rules.rtsmaxsquadsize = Max Squad Size
rules.rtsminattackweight = Min Attack Weight rules.rtsminattackweight = Min Attack Weight
rules.cleanupdeadteams = Clean Up Defeated Team Buildings (PvP) rules.cleanupdeadteams = Clean Up Defeated Team Buildings (PvP)
rules.corecapture = Capture Core On Destruction rules.corecapture = Capture Core On Destruction

View File

@@ -109,6 +109,9 @@ public class RtsAI{
if(unit.isCommandable() && !unit.command().hasCommand() && used.add(unit.id)){ if(unit.isCommandable() && !unit.command().hasCommand() && used.add(unit.id)){
squad.clear(); squad.clear();
data.tree().intersect(unit.x - squadRadius/2f, unit.y - squadRadius/2f, squadRadius, squadRadius, squad); data.tree().intersect(unit.x - squadRadius/2f, unit.y - squadRadius/2f, squadRadius, squadRadius, squad);
squad.truncate(data.team.rules().rtsMaxSquad);
//remove overlapping squads //remove overlapping squads
squad.removeAll(u -> (u != unit && used.contains(u.id)) || !u.isCommandable() || u.command().hasCommand()); squad.removeAll(u -> (u != unit && used.contains(u.id)) || !u.isCommandable() || u.command().hasCommand());
//mark used so other squads can't steal them //mark used so other squads can't steal them

View File

@@ -2,6 +2,7 @@ package mindustry.entities.abilities;
import arc.graphics.*; import arc.graphics.*;
import arc.util.*; import arc.util.*;
import mindustry.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.entities.*; import mindustry.entities.*;
import mindustry.gen.*; import mindustry.gen.*;
@@ -34,7 +35,7 @@ public class MoveEffectAbility extends Ability{
@Override @Override
public void update(Unit unit){ public void update(Unit unit){
counter += Time.delta; 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); Tmp.v1.trns(unit.rotation - 90f, x, y);
counter %= interval; 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); 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);

View File

@@ -234,6 +234,8 @@ public class Rules{
public boolean rtsAi; public boolean rtsAi;
/** Minimum size of attack squads. */ /** Minimum size of attack squads. */
public int rtsMinSquad = 4; public int rtsMinSquad = 4;
/** Maximum size of attack squads. */
public int rtsMaxSquad = 1000;
/** Minimum "advantage" needed for a squad to attack. Higher -> more cautious. */ /** Minimum "advantage" needed for a squad to attack. Higher -> more cautious. */
public float rtsMinWeight = 1.2f; public float rtsMinWeight = 1.2f;

View File

@@ -269,6 +269,7 @@ public class CustomRulesDialog extends BaseDialog{
check("@rules.rtsai", b -> teams.rtsAi = b, () -> teams.rtsAi, () -> team != rules.defaultTeam); 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.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); number("@rules.rtsminattackweight", f -> teams.rtsMinWeight = f, () -> teams.rtsMinWeight, () -> teams.rtsAi);
check("@rules.infiniteresources", b -> teams.infiniteResources = b, () -> teams.infiniteResources); check("@rules.infiniteresources", b -> teams.infiniteResources = b, () -> teams.infiniteResources);

View File

@@ -10,9 +10,7 @@ import mindustry.type.*;
import mindustry.world.consumers.*; import mindustry.world.consumers.*;
import mindustry.world.meta.*; import mindustry.world.meta.*;
/** /** A generator that just takes in certain items or liquids. */
* A generator that just takes in certain items or liquids. Basically SingleTypeGenerator, but not unreliable garbage.
*/
public class ConsumeGenerator extends PowerGenerator{ public class ConsumeGenerator extends PowerGenerator{
/** The time in number of ticks during which a single item will produce power. */ /** The time in number of ticks during which a single item will produce power. */
public float itemDuration = 120f; public float itemDuration = 120f;