From d117e156fe3d78a7baabdee0bdd42f1382f9e193 Mon Sep 17 00:00:00 2001 From: MEEP of Faith Date: Thu, 25 Aug 2022 01:06:52 -0700 Subject: [PATCH] Wave send rule --- core/assets/bundles/bundle.properties | 1 + core/src/mindustry/game/Rules.java | 2 ++ core/src/mindustry/logic/LExecutor.java | 1 + core/src/mindustry/logic/LogicRule.java | 1 + core/src/mindustry/ui/dialogs/CustomRulesDialog.java | 1 + core/src/mindustry/ui/fragments/HudFragment.java | 2 +- 6 files changed, 7 insertions(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 71134bf936..0fae24229e 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1145,6 +1145,7 @@ rules.coreincinerates = Core Incinerates Overflow rules.disableworldprocessors = Disable World Processors rules.schematic = Schematics Allowed rules.wavetimer = Wave Timer +rules.wavesending = Wave Sending rules.waves = Waves rules.attack = Attack Mode rules.rtsai = RTS AI diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index 0f3a658652..c912b59196 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -25,6 +25,8 @@ public class Rules{ public TeamRules teams = new TeamRules(); /** Whether the waves come automatically on a timer. If not, waves come when the play button is pressed. */ public boolean waveTimer = true; + /** Whether the waves can be manually summoned with the play button. */ + public boolean waveSending = true; /** Whether waves are spawnable at all. */ public boolean waves; /** Whether the game objective is PvP. Note that this enables automatic hosting. */ diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index fdd4020f3e..1c9faa9dc7 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -1401,6 +1401,7 @@ public class LExecutor{ case wave -> state.wave = exec.numi(value); case currentWaveTime -> state.wavetime = exec.numf(value) * 60f; case waves -> state.rules.waves = exec.bool(value); + case waveSending -> state.rules.waveSending = exec.bool(value); case attackMode -> state.rules.attackMode = exec.bool(value); case waveSpacing -> state.rules.waveSpacing = exec.numf(value) * 60f; case enemyCoreBuildRadius -> state.rules.enemyCoreBuildRadius = exec.numf(value) * 8f; diff --git a/core/src/mindustry/logic/LogicRule.java b/core/src/mindustry/logic/LogicRule.java index 44329eb627..8314707ff4 100644 --- a/core/src/mindustry/logic/LogicRule.java +++ b/core/src/mindustry/logic/LogicRule.java @@ -6,6 +6,7 @@ public enum LogicRule{ waves, wave, waveSpacing, + waveSending, attackMode, enemyCoreBuildRadius, dropZoneRadius, diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index e941b3a113..c6e4d37eae 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -140,6 +140,7 @@ public class CustomRulesDialog extends BaseDialog{ title("@rules.title.waves"); check("@rules.waves", b -> rules.waves = b, () -> rules.waves); check("@rules.wavetimer", b -> rules.waveTimer = b, () -> rules.waveTimer); + check("@rules.wavesending", b -> rules.waveSending = b, () -> rules.waveSending); check("@rules.waitForWaveToEnd", b -> rules.waitEnemies = b, () -> rules.waitEnemies); number("@rules.wavespacing", false, f -> rules.waveSpacing = f * 60f, () -> rules.waveSpacing / 60f, () -> rules.waveTimer, 1, Float.MAX_VALUE); //this is experimental, because it's not clear that 0 makes it default. diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index eb6c32e54c..4e0ffdd302 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -908,7 +908,7 @@ public class HudFragment{ } private boolean canSkipWave(){ - return state.rules.waves && ((net.server() || player.admin) || !net.active()) && state.enemies == 0 && !spawner.isSpawning(); + return state.rules.waves && state.rules.waveSending && ((net.server() || player.admin) || !net.active()) && state.enemies == 0 && !spawner.isSpawning(); } }