Configurable RTS AI parameters for logic

This commit is contained in:
Anuken 2022-04-24 16:46:26 -04:00
parent abdb1c1252
commit d5e522994e
7 changed files with 15 additions and 11 deletions

View file

@ -167,7 +167,7 @@ public class RtsAI{
//defend when close, or this is the only squad defending
//TODO will always rush to defense no matter what
if(best instanceof CoreBuild || units.size >= data.team.rules().rtsAiMinSquadSize || best.within(ax, ay, 500f)){
if(best instanceof CoreBuild || units.size >= data.team.rules().rtsMinSquad || best.within(ax, ay, 500f)){
defend = best;
if(debug){
@ -234,7 +234,7 @@ public class RtsAI{
}
@Nullable Building findTarget(float x, float y, int total, float dps, float health){
if(total < data.team.rules().rtsAiMinSquadSize) return null;
if(total < data.team.rules().rtsMinSquad) return null;
//flag priority?
//1. generator
@ -264,7 +264,7 @@ public class RtsAI{
);
float weight = weights.get(result, 0f);
if(weight < data.team.rules().minAttackWeight && total < Units.getCap(data.team)){
if(weight < data.team.rules().rtsMinWeight && total < Units.getCap(data.team)){
return null;
}

View file

@ -597,7 +597,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
remove();
}
/** @return name of direct or indirect player controller. TODO comamnd support*/
/** @return name of direct or indirect player controller. */
@Override
public @Nullable String getControllerName(){
if(isPlayer()) return getPlayer().name;

View file

@ -225,9 +225,9 @@ public class Rules{
/** Enables "RTS" unit AI. TODO wip */
public boolean rtsAi;
/** Minimum size of attack squads. */
public int rtsAiMinSquadSize = 4;
public int rtsMinSquad = 4;
/** Minimum "advantage" needed for a squad to attack. Higher -> more cautious. */
public float minAttackWeight = 1.2f;
public float rtsMinWeight = 1.2f;
/** How fast unit factories build units. */
public float unitBuildSpeedMultiplier = 1f;

View file

@ -1355,7 +1355,7 @@ public class LExecutor{
}
}
case ambientLight -> state.rules.ambientLight.fromDouble(exec.num(value));
case unitBuildSpeed, unitDamage, blockHealth, blockDamage, buildSpeed -> {
case unitBuildSpeed, unitDamage, blockHealth, blockDamage, buildSpeed, rtsMinSquad, rtsMinWeight -> {
if(exec.obj(p1) instanceof Team team){
float num = exec.numf(value);
switch(rule){
@ -1364,6 +1364,8 @@ public class LExecutor{
case unitDamage -> team.rules().unitDamageMultiplier = Math.max(num, 0f);
case blockHealth -> team.rules().blockHealthMultiplier = Math.max(num, 0.001f);
case blockDamage -> team.rules().blockDamageMultiplier = Math.max(num, 0f);
case rtsMinWeight -> team.rules().rtsMinWeight = num;
case rtsMinSquad -> team.rules().rtsMinSquad = (int)num;
}
}
}

View file

@ -1265,7 +1265,7 @@ public class LStatements{
fields(table, "w", p3, s -> p3 = s);
fields(table, "h", p4, s -> p4 = s);
}
case buildSpeed, unitBuildSpeed, unitDamage, blockHealth, blockDamage -> {
case buildSpeed, unitBuildSpeed, unitDamage, blockHealth, blockDamage, rtsMinSquad, rtsMinWeight -> {
if(p1.equals("0")){
p1 = "@sharded";
}

View file

@ -18,7 +18,9 @@ public enum LogicRule{
unitBuildSpeed,
unitDamage,
blockHealth,
blockDamage;
blockDamage,
rtsMinWeight,
rtsMinSquad;
public static final LogicRule[] all = values();
}

View file

@ -254,8 +254,8 @@ public class CustomRulesDialog extends BaseDialog{
number("@rules.blockdamagemultiplier", f -> teams.blockDamageMultiplier = f, () -> teams.blockDamageMultiplier);
check("@rules.rtsai", b -> teams.rtsAi = b, () -> teams.rtsAi, () -> team != rules.defaultTeam);
numberi("@rules.rtsminsquadsize", f -> teams.rtsAiMinSquadSize = f, () -> teams.rtsAiMinSquadSize, () -> teams.rtsAi, 0, 100);
number("@rules.rtsminattackweight", f -> teams.minAttackWeight = f, () -> teams.minAttackWeight, () -> teams.rtsAi);
numberi("@rules.rtsminsquadsize", f -> teams.rtsMinSquad = f, () -> teams.rtsMinSquad, () -> teams.rtsAi, 0, 100);
number("@rules.rtsminattackweight", f -> teams.rtsMinWeight = f, () -> teams.rtsMinWeight, () -> teams.rtsAi);
check("@rules.infiniteresources", b -> teams.infiniteResources = b, () -> teams.infiniteResources);
number("@rules.buildspeedmultiplier", f -> teams.buildSpeedMultiplier = f, () -> teams.buildSpeedMultiplier, 0.001f, 50f);