Rule for extra core no-build radius per-team
This commit is contained in:
@@ -1417,6 +1417,7 @@ rules.unitpayloadsexplode = Carried Payloads Explode With The Unit
|
|||||||
rules.unitcap = Base Unit Cap
|
rules.unitcap = Base Unit Cap
|
||||||
rules.limitarea = Limit Map Area
|
rules.limitarea = Limit Map Area
|
||||||
rules.enemycorebuildradius = Enemy Core No-Build Radius:[lightgray] (tiles)
|
rules.enemycorebuildradius = Enemy Core No-Build Radius:[lightgray] (tiles)
|
||||||
|
rules.extracorebuildradius = Extra No-Build Radius:[lightgray] (tiles)
|
||||||
rules.wavespacing = Wave Spacing:[lightgray] (sec)
|
rules.wavespacing = Wave Spacing:[lightgray] (sec)
|
||||||
rules.initialwavespacing = Initial Wave Spacing:[lightgray] (sec)
|
rules.initialwavespacing = Initial Wave Spacing:[lightgray] (sec)
|
||||||
rules.buildcostmultiplier = Build Cost Multiplier
|
rules.buildcostmultiplier = Build Cost Multiplier
|
||||||
|
|||||||
@@ -243,6 +243,10 @@ public class Rules{
|
|||||||
return (this.env & env) != 0;
|
return (this.env & env) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float buildRadius(Team team){
|
||||||
|
return enemyCoreBuildRadius + teams.get(team).extraCoreBuildRadius;
|
||||||
|
}
|
||||||
|
|
||||||
public float unitBuildSpeed(Team team){
|
public float unitBuildSpeed(Team team){
|
||||||
return unitBuildSpeedMultiplier * teams.get(team).unitBuildSpeedMultiplier;
|
return unitBuildSpeedMultiplier * teams.get(team).unitBuildSpeedMultiplier;
|
||||||
}
|
}
|
||||||
@@ -330,6 +334,9 @@ public class Rules{
|
|||||||
public float blockDamageMultiplier = 1f;
|
public float blockDamageMultiplier = 1f;
|
||||||
/** Multiplier for building speed. */
|
/** Multiplier for building speed. */
|
||||||
public float buildSpeedMultiplier = 1f;
|
public float buildSpeedMultiplier = 1f;
|
||||||
|
/** Extra spacing added to the no-build zone around the core. */
|
||||||
|
public float extraCoreBuildRadius = 0f;
|
||||||
|
|
||||||
|
|
||||||
//build cost disabled due to technical complexity
|
//build cost disabled due to technical complexity
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,19 @@ public class Teams{
|
|||||||
return Geometry.findClosest(x, y, get(team).cores);
|
return Geometry.findClosest(x, y, get(team).cores);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean anyEnemyCoresWithinBuildRadius(Team team, float x, float y){
|
||||||
|
for(TeamData data : active){
|
||||||
|
if(team != data.team){
|
||||||
|
for(CoreBuild tile : data.cores){
|
||||||
|
if(tile.within(x, y, state.rules.buildRadius(tile.team) + tilesize)){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean anyEnemyCoresWithin(Team team, float x, float y, float radius){
|
public boolean anyEnemyCoresWithin(Team team, float x, float y, float radius){
|
||||||
for(TeamData data : active){
|
for(TeamData data : active){
|
||||||
if(team != data.team){
|
if(team != data.team){
|
||||||
|
|||||||
@@ -178,11 +178,12 @@ public class OverlayRenderer{
|
|||||||
}else{
|
}else{
|
||||||
state.teams.eachEnemyCore(player.team(), core -> {
|
state.teams.eachEnemyCore(player.team(), core -> {
|
||||||
//it must be clear that there is a core here.
|
//it must be clear that there is a core here.
|
||||||
if(/*core.wasVisible && */Core.camera.bounds(Tmp.r1).overlaps(Tmp.r2.setCentered(core.x, core.y, state.rules.enemyCoreBuildRadius * 2f))){
|
float br = state.rules.buildRadius(core.team);
|
||||||
|
if(/*core.wasVisible && */Core.camera.bounds(Tmp.r1).overlaps(Tmp.r2.setCentered(core.x, core.y, br * 2f))){
|
||||||
Draw.color(Color.darkGray);
|
Draw.color(Color.darkGray);
|
||||||
Lines.circle(core.x, core.y - 2, state.rules.enemyCoreBuildRadius);
|
Lines.circle(core.x, core.y - 2,br);
|
||||||
Draw.color(Pal.accent, core.team.color, 0.5f + Mathf.absin(Time.time, 10f, 0.5f));
|
Draw.color(Pal.accent, core.team.color, 0.5f + Mathf.absin(Time.time, 10f, 0.5f));
|
||||||
Lines.circle(core.x, core.y, state.rules.enemyCoreBuildRadius);
|
Lines.circle(core.x, core.y, br);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -302,6 +302,8 @@ public class CustomRulesDialog extends BaseDialog{
|
|||||||
check("@rules.buildai", b -> teams.buildAi = b, () -> teams.buildAi, () -> team != rules.defaultTeam && rules.env != Planets.erekir.defaultEnv && !rules.pvp);
|
check("@rules.buildai", b -> teams.buildAi = b, () -> teams.buildAi, () -> team != rules.defaultTeam && rules.env != Planets.erekir.defaultEnv && !rules.pvp);
|
||||||
number("@rules.buildaitier", false, f -> teams.buildAiTier = f, () -> teams.buildAiTier, () -> teams.buildAi && rules.env != Planets.erekir.defaultEnv && !rules.pvp, 0, 1);
|
number("@rules.buildaitier", false, f -> teams.buildAiTier = f, () -> teams.buildAiTier, () -> teams.buildAi && rules.env != Planets.erekir.defaultEnv && !rules.pvp, 0, 1);
|
||||||
|
|
||||||
|
number("@rules.extracorebuildradius", f -> teams.extraCoreBuildRadius = f * tilesize, () -> Math.min(teams.extraCoreBuildRadius / tilesize, 200), () -> !rules.polygonCoreProtection);
|
||||||
|
|
||||||
check("@rules.infiniteresources", b -> teams.infiniteResources = b, () -> teams.infiniteResources);
|
check("@rules.infiniteresources", b -> teams.infiniteResources = b, () -> teams.infiniteResources);
|
||||||
number("@rules.buildspeedmultiplier", f -> teams.buildSpeedMultiplier = f, () -> teams.buildSpeedMultiplier, 0.001f, 50f);
|
number("@rules.buildspeedmultiplier", f -> teams.buildSpeedMultiplier = f, () -> teams.buildSpeedMultiplier, 0.001f, 50f);
|
||||||
|
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ public class Build{
|
|||||||
if(closest != null && closest.team != team){
|
if(closest != null && closest.team != team){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}else if(state.teams.anyEnemyCoresWithin(team, x * tilesize + type.offset, y * tilesize + type.offset, state.rules.enemyCoreBuildRadius + tilesize)){
|
}else if(state.teams.anyEnemyCoresWithinBuildRadius(team, x * tilesize + type.offset, y * tilesize + type.offset)){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user