RTS max squad size
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user