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.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

View File

@ -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

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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;